Php PDO不返回任何行
此设置不会从数据库返回任何内容。这是我第一次使用PDO,所以我可能遗漏了一些东西。它根本没有抛出任何错误,只是一个空结果Php PDO不返回任何行,php,mysql,pdo,Php,Mysql,Pdo,此设置不会从数据库返回任何内容。这是我第一次使用PDO,所以我可能遗漏了一些东西。它根本没有抛出任何错误,只是一个空结果 $results = array(); $stmt = $bd->prepare("Select Beer.Beer_Name, Prices.Price, Prices.Shop_Name FROM Beer, Prices WHERE Beer.Beer_Name = Prices.Beer_Name AND Shop_Id = :retailer");
$results = array();
$stmt = $bd->prepare("Select Beer.Beer_Name, Prices.Price, Prices.Shop_Name FROM Beer, Prices WHERE Beer.Beer_Name = Prices.Beer_Name AND Shop_Id = :retailer");
$stmt->bindValue(':retailer', $retailer);
$stmt->execute();
$results[0] = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($results[0]);
您不需要事先设置数组,并且可以在使用
$query->RowCount()
之前检查结果。下面是一个使用错误捕获的示例:
try {
// Enabled throwing errors - you can remove this after debugging
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Prepare the statement
$stmt = $bd->prepare("Select Beer.Beer_Name, Prices.Price, Prices.Shop_Name FROM Beer, Prices WHERE Beer.Beer_Name = Prices.Beer_Name AND Shop_Id = :retailer");
// You can also use bindparams, I like to use execute and pass and array so it is shorter
$stmt->execute(array(
':retailer' => $retailer
));
if($stmt->RowCount()==0) {
// Do stuff when no results are found (without an error)
} else {
$Results = $stmt->FetchAll();
}
// Catch any exceptions and put the error into $e
} catch (Exception $e) {
// Echo the error we got - you should only output errors when debugging
echo $e->GetMessage();
}
如果您有任何问题,请告诉我,但此方法会显示任何数据库错误。如果您没有收到错误,您的查询将不会返回任何内容。问题1-您可能没有正确捕获错误。在异常模式下设置PDO,用try/catch包装代码。问题2-$retailer可能为空,或者根本没有与$retailer匹配的记录。提示1-始终在MySQL终端或其他MySQL GUI工具中测试您的查询,以便确保您的查询会成功,并进行调试。是的,我打印了$DELERKER,并对其进行了设置,我在数据库上手动运行了查询,结果返回了一行。建立数据库连接。显示错误。使用显式连接。它已经正常化了,我只是在测试它的连接。问题解决了,请键入数据库名称。还可以设置
ERRMODE\u WARNING
,在其中它的行为更像mysqli
或mysql\u*()
,但异常模式确实是最通用的,因为您可以将所有内容包装在try/catch
块中。不,永远不要使用rowCount
,因为它不准确,可能无法工作。如果执行失败,则执行异常。然后fetchAll
并对数组中的元素进行计数,这就是获得“行计数”的方式。或者,您可以检查$stmt->execute()
的结果,如果返回true,您可以fetchAll
@N.B.我刚刚研究了一下,看起来您是对的。我从来没有遇到过Mysql上的RowCount问题,但是根据文档,其他数据库可以以不同的方式处理它。感谢tipThe,问题是即使MySQL也可能报告错误。在99.9%的MySQL部署中,您可能不会遇到这个问题,但事实是它不可靠——这很糟糕。如果您可以编辑您的答案,将计算数组的行数而不是rowCount
,我将非常乐意投票支持您。