Mysql 行数不起作用?
我有一个MySQL数据库,但我的功能不起作用。我想知道我的数据库查询得到了多少结果,但我什么也没有得到,甚至没有得到0。我还尝试了$values->num\u行;同样的结果。不要回一个号码。。。没什么 我的代码:Mysql 行数不起作用?,mysql,Mysql,我有一个MySQL数据库,但我的功能不起作用。我想知道我的数据库查询得到了多少结果,但我什么也没有得到,甚至没有得到0。我还尝试了$values->num\u行;同样的结果。不要回一个号码。。。没什么 我的代码: $values = $database->query("SELECT * FROM `wp_all_import_xml` WHERE name = '$title' AND price = '$price' AND shop = '$shop' AND link = '$lin
$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";
如何获取返回的行数
问候语mysqli_num_rows函数确实有效 对观察到的行为最可能的解释是错误正在发生并被忽略 要对此进行调试,请首先确保启用了错误报告 修改代码以检查查询返回的内容。通过执行条件测试,验证它没有返回FALSE
if ($values = $mysqli->query(...) ) {
// query returned a resultset
} else {
// query returned FALSE
}
如果我们只需要检索行数,那么我们可以在选择列表中使用COUNT*
if ( $res = $mysqli->query("SELECT COUNT(*) AS cnt FROM ... ") ) {
如果查询成功,那么即使计数为零,我们也会返回一行。我们可以像处理其他查询的结果一样轻松地处理结果,而不需要处理num_行,也不用担心查询是缓冲的还是非缓冲的,等等
我们将假设$database是一个mysqli连接,而不是一个PDO连接,因为代码包含对mysqli_num_rows函数的调用。如果是PDO连接,则num_行不起作用
问题中的代码遵循代码中常见的易受SQL注入攻击的模式。在本摘录中,我们无法确定SQL文本中包含的变量值是否具有潜在的不安全性,因此我们无法判断它是否易受攻击
如果这是一个带有绑定占位符的准备好的语句,那么我们就可以知道了。
将准备好的语句与绑定占位符一起使用。这并不难。打开错误报告。不返回任何内容是否意味着您的echo语句成功运行,但$count\u values变量为空?其他变量是什么?具体发生了什么?您的代码对SQL注入开放,因此我们甚至不知道您实际执行的SQL语句。是的,我没有显示值…-但是SQL语句并不重要。。。即使我的SQL语句错误,我也应该返回0…@Jan如果SQL查询出错,$values将为false,这不是mysqli_num_rows的有效参数。我们可以整天猜测而不看到错误消息。我已经得到了解决方案。我得到一个错误。我现在的问题是,如果没有发现任何错误,或者当其他错误出现时,我是否会返回错误?因为我在phpMyAdmin中手动检查了该值,并且在那里我为成功执行并返回空结果的SELECT queryA查询返回了一个值。对于MySQL、SQL、mysqli来说,执行返回零行的查询是完全有效的。结果集将为空。这是正确的。如果您希望实际获取具有计数的行,则使用SELECT count*查询。这通常比将一个大的结果集返回给客户端更有效。我现在用$database->error检查了查询,得到了我的错误。使用了错误的行名称!