Num_rows不起作用?

时间:2017-02-17 21:07:08

标签: mysql

我有一个MySQL数据库,但我的功能不起作用。我想知道我的数据库查询得到了多少结果,但我什么也得不到,甚至没有。我也试过$values->num_rows;相同的结果。不要找回一个号码......什么都不是

我的代码:

$values = $database->query("SELECT * FROM `wp_all_import_xml` WHERE name = '$title' AND price = '$price' AND shop = '$shop' AND link = '$link'");

$count_values = mysqli_num_rows($values);

echo "ERROR by detecting Product (More than 1 Row return by SQL!): " .$title. " Preis: " .$price. " Shop: " .$shop. " Link: " .$link. "\t num_rows: " .$count_values. "\n";

如何获得返回的行数?

问候

1 个答案:

答案 0 :(得分:1)

mysqli_num_rows函数可以正常工作。

对观察到的行为最可能的解释是发生错误并被忽略。

要进行调试,首先要确保启用了错误报告。

修改代码以检查查询的返回。通过执行条件测试验证它没有返回FALSE。

if ($values = $mysqli->query(...) ) {
   // query returned a resultset
} else {
   // query returned FALSE
}

如果我们需要检索的是行数,那么我们可以在SELECT列表中使用COUNT(*)。

if ( $res = $mysqli->query("SELECT COUNT(*) AS cnt FROM ... ") ) {

如果查询成功,那么即使计数为零,我们也会返回一行。我们可以轻松处理结果,就像我们处理来自其他查询的结果一样,无需使用num_rows,并担心查询是缓冲还是无缓冲等等。

我们假设$database是一个mysqli连接,而不是PDO连接,因为代码包含对mysqli_num_rows函数的调用。如果是PDO连接,则“num_rows不起作用”。

问题中的代码遵循易受SQL注入攻击的代码中经常出现的模式。 (在此摘录中,我们无法确定SQL文本中包含的变量的值是否可能不安全,因此我们无法判断它是否易受攻击。)

如果这是带有绑定占位符的准备好的声明,那么我们可以告诉你 使用带有绑定占位符的预准备语句。这并不难。