Php 使用带参数的PDO计数查询
我设置了以下PDO查询:Php 使用带参数的PDO计数查询,php,mysql,pdo,Php,Mysql,Pdo,我设置了以下PDO查询: $CHECK_MATCH = $DBH->query(" SELECT COUNT(*) as matches FROM users WHERE username = :username AND password = :password "); $CHECK_MATCH->bindParam(':username', $username); $CHECK_MATCH->bindParam(':password', $passw
$CHECK_MATCH = $DBH->query("
SELECT COUNT(*) as matches FROM users WHERE
username = :username AND password = :password
");
$CHECK_MATCH->bindParam(':username', $username);
$CHECK_MATCH->bindParam(':password', $password);
但是,我收到一个错误,它是这样说的:
Fatal error: Call to a member function bindParam() on a non-object
为什么这不起作用?如果我使用
prepare
而不是query
,如何从语句中检索所需的值?您没有准备语句。您直接执行了一个查询。由于使用查询的占位符就->query()
而言不是有效的查询,因此查询失败,并返回布尔值FALSE。然后将该布尔值设为FALSE,并尝试将其视为对象
正确的顺序是:
$stmt = $dbh->prepare('.... your query here ...');
^^^^^^^----note the new method call
$stmt->bindParam(...);
$stmt->execute();
你没有准备一份声明。您直接执行了一个查询。由于使用查询的占位符就
->query()
而言不是有效的查询,因此查询失败,并返回布尔值FALSE。然后将该布尔值设为FALSE,并尝试将其视为对象
正确的顺序是:
$stmt = $dbh->prepare('.... your query here ...');
^^^^^^^----note the new method call
$stmt->bindParam(...);
$stmt->execute();
您需要准备查询:
$CHECK_MATCH = $DBH->prepare(" <------ Changed query for prepare
SELECT COUNT(*) as matches FROM users WHERE
username = :username AND password = :password
");
$CHECK_MATCH->bindParam(':username', $username);
$CHECK_MATCH->bindParam(':password', $password);
$CHECK\u MATCH=$DBH->prepare(您需要准备查询:
$CHECK_MATCH = $DBH->prepare(" <------ Changed query for prepare
SELECT COUNT(*) as matches FROM users WHERE
username = :username AND password = :password
");
$CHECK_MATCH->bindParam(':username', $username);
$CHECK_MATCH->bindParam(':password', $password);
$CHECK\u MATCH=$DBH->prepare(我认为这个答案没有必要,因为Marc B的答案实际上解决了这个问题。既然@proPhet要求一个完整的解决方案,这里是:
$CHECK_MATCH = $DBH->prepare("SELECT COUNT(*) as matches FROM users WHERE
username = :username AND password = :password");
$CHECK_MATCH->bindParam(':username', $username);
$CHECK_MATCH->bindParam(':password', $password);
$CHECK_MATCH->execute();
// Fetch as object
$row = $CHECK_MATCH->fetch(PDO::FETCH_OBJ);
echo $row->matches;
我认为这个答案是不必要的,因为Marc B的答案实际上解决了这个问题。既然@proPhet要求一个完整的解决方案,那么它就是:
$CHECK_MATCH = $DBH->prepare("SELECT COUNT(*) as matches FROM users WHERE
username = :username AND password = :password");
$CHECK_MATCH->bindParam(':username', $username);
$CHECK_MATCH->bindParam(':password', $password);
$CHECK_MATCH->execute();
// Fetch as object
$row = $CHECK_MATCH->fetch(PDO::FETCH_OBJ);
echo $row->matches;
为什么不启用PDO警告?->query
用于直接执行,而不是语句准备。尝试$DBH->prepare
而不是$DBH->query
我使用了->query
以便从结果中获取值。如何使用准备好的语句获取这些值?可以使用$ro获取这些值w=$CHECK_MATCH->fetch(PDO::fetch_OBJ)
为什么不启用PDO警告?->query
用于直接执行,而不是语句准备。尝试$DBH->prepare
而不是$DBH->query
我使用了->query
以便从结果中获取值。如何使用准备好的语句获取这些值?可以使用获取这些值ode>$row=$CHECK\u MATCH->fetch(PDO::fetch\u OBJ)