我正在尝试构建一个简单的查询来处理搜索结果。我稍后会使PDO安全,但是现在,我继续在非对象错误上调用成员函数execute(),但是我看不到下面的任何内容导致这种情况。错误发生在$ results-> execute();
PDO对象/连接工作正常,我的代码可以在每个其他页面上工作但是这个。我错过了什么?某种语法错误?
$last = $_GET['last'];
$author = $_GET['author'];
$results = $dbh->prepare("select
wp_users.ID AS user_id,
wp_users.ID,
wp_users.display_name,
FROM wp_users
WHERE wp_users.display_name = $author; ");
$results->execute();
$row = $results->fetchAll(PDO::FETCH_ASSOC);
答案 0 :(得分:2)
如果数据库服务器成功准备语句,PDO :: prepare()将返回PDOStatement对象。如果数据库服务器无法成功准备语句,PDO :: prepare()将返回FALSE或发出PDOException(取决于错误处理)。
由于无效的sql,它返回false。要检查实际错误,您可以执行以下操作:
if (!$results) {
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
}
最有可能的是,你使用的变量没有被引用,这就是为什么你应该真的只使用命名参数开始,因为它实际上并不困难:
$results = $dbh->prepare("select wp_users.ID AS user_id,
wp_users.ID,
wp_users.display_name,
FROM wp_users
WHERE wp_users.display_name = :author");
$results->execute([':author' => $author]);