MYSQLI / PHP:num_rows不返回/ null

时间:2017-07-13 11:14:25

标签: php mysqli null return-value mysql-num-rows

我已经阅读了很多相同问题的主题,但都没有解决我的问题 我有以下代码:

$connection = mysqli_connect('...');
if(mysqli_connect_errno()) {
    die('Connect Error');
}
$connection->set_charset("utf8");
$success = $connection->query("INSERT INTO hilde_entrys (Comment, Refer_ID, Account_Adress) VALUES ('".$_POST["comment"]."','".$GET["id"]."','".$userData["user_address"]."')");
$success->store_result(); //I did this as it helped some people - it didn´t help me :(
$rows = $success->num_rows;
while($row = $success->fetch_row()) { //This whole while-loop helped some other guy on stackoverflow - not me
    $rows = $success->num_rows; //Incrementing by 1 each time
} 
$rows = $success->num_rows; // Finally the total count 

if ($rows > 0) { //What I actually intended to do with the num_rows...
    $success->free();
    $success->close();
    $connection->close();
} else {
    $success->free();
    $success->close();
    $connection->close();
    die("Query failed.");
}

不知何故,即使我尽可能地尝试了一切,它也不会返回任何预期的东西。 (是的,查询和其他一切都有效。我试过了。)怎么了?
提前感谢您的所有答案,
VicStudio

哦,顺便说一句:即使我删除了$success->free();,它也不会改变num_rows ....

编辑:在你们告诉我INSERT不会返回任何行之后,我怎样才能检查查询是否成功?

ONE MORE EDIT :首先,有人告诉我使用affected_rows而不是num_rows,我可以理解。不知何故,它仍然无法正常工作,所以你们其中一个人让我在我的php脚本中激活错误报告,现在我收到了两个错误消息(一个通知和一个致命错误):
注意:尝试在第XX行(我的网页)中获取非对象的属性
致命错误:在第XX行的(我的网页)中的非对象上调用成员函数close()
通知引用了行$rows = $success->affected_rows;(我用此替换了$rows = $success->num_rows)。 (我评论了while循环) 导致屏幕变为空白的第二个错误是指$success->close();,即else子句中的错误。这意味着 a)它没有发现某些东西被改变了 b)关闭查询时出现问题 有人可以向我解释原因吗?我检查了我的数据库并且INSERT查询成功了,因此它应该在if中,而不是在else中。为什么它不希望我关闭查询?我假设这两个错误都与彼此有关。先谢谢你,伙计们。很抱歉在我的新帖子之间很长一段时间,但需要时间来解决问题,特别是写下来。

2 个答案:

答案 0 :(得分:2)

要插入,您应该使用affected_rows $rows = $success->affected_rows; PHP affected_rows

在此处阅读num_rows PHP num_rows

答案 1 :(得分:2)

由于运行INSERT查询的mysqli_query()仅返回TRUE或FALSE,因此$success永远不会像SELECT查询中那样成为mysqli_result对象。

因此,affected_rows的测试应该像这样使用连接对象。事实上,affected_rows属性甚至只存在于mysqli_object上。

$connection->affected_rows;

所以

$connection = mysqli_connect('...');
if(mysqli_connect_errno()) {
    die('Connect Error');
}
$connection->set_charset("utf8");
$success = $connection->query("AN INSERT QUERY");

$rows = $connection->affected_rows;
  

我承认,PHP手册在这方面很有用,but it does state this

这也解释了为什么

$success->free();
$success->close();

无效,因为$success不是对象。

还有为什么

$success->store_result();

不起作用。 $success不是对象,也没有结果存储。