我有一个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";
如何获得返回的行数?
问候
答案 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文本中包含的变量的值是否可能不安全,因此我们无法判断它是否易受攻击。)
如果这是带有绑定占位符的准备好的声明,那么我们可以告诉你 使用带有绑定占位符的预准备语句。这并不难。