如何在此查询中使用预准备语句?

ope*_*rog 1 php pdo prepared-statement

我是PHP和PDO的新手,我尝试在这里使用预处理语句.经过1小时的尝试,我放弃了.或者我的教程非常糟糕.

编辑:

没有准备好的陈述,这完美地工

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
    $prepared = $dbh->prepare('SELECT * from sys_navigation_point WHERE name="root"');
    //$prepared->bindParam('foo', 'root');

    $prepared->execute();

    foreach($prepared as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果准备好的声明,这根本不起作用.在执行此操作时获取完全空白的页面:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
    $prepared = $dbh->prepare('SELECT * from sys_navigation_point WHERE name=:foo');
    $prepared->bindParam('foo', 'root');

    $prepared->execute();

    foreach($prepared as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}
Run Code Online (Sandbox Code Playgroud)

foo应该用root替换.但事实并非如此.

joh*_*nes 5

在绑定时也尝试使用名称中的冒号:

$prepared->bindParam(':foo', 'root');
Run Code Online (Sandbox Code Playgroud)

正如在文档中所做的那样:http://php.net/manual/en/pdostatement.bindparam.php