执行 INSERT 查询后,Mysqli num_rows() 不返回任何内容/null

问题描述 投票:0回答:2

我读过很多有同样问题的主题,但都没有解决我的问题
我有以下代码:

$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.");
}

不知何故,即使我尝试了一切可能的方法,它也不会返回任何预期的结果。 (是的,查询和其他一切都有效。我尝试过。)。怎么了?
感谢您提前的所有答复,
维克工作室

哦,顺便说一句:即使我删除了

$success->free();
,它也不会改变任何
num_rows
....

编辑:在你们告诉我

INSERT
不会返回任何行之后,我如何检查查询是否成功?

再次编辑:首先,有人告诉我使用affected_rows而不是num_rows,我完全可以理解。不知怎的,它仍然不起作用,所以你们中的一个人要求我在我的 php 脚本中激活错误报告,我现在收到以下两条错误消息(一条通知和一条致命错误):
注意:尝试获取(我的网页)第 XX 行非对象的属性
致命错误:在第 XX 行(我的网页)中的非对象上调用成员函数 close()
该通知引用了

$rows = $success->affected_rows;
行(我用此替换了
$rows = $success->num_rows
)。 (我评论了 while 循环)。
第二个错误导致屏幕变为空白,它指的是 else 子句中的
$success->close();
。这意味着
a)它没有检测到某些内容已更改并且
b) 我关闭查询时遇到问题。
有人可以向我解释为什么吗?我检查了数据库,INSERT 查询成功,因此它应该出现在 if 中,而不是 else 中。为什么它不希望我关闭查询?我认为这两个错误彼此有关系。预先感谢各位。抱歉,我的新帖子之间间隔了很长时间,但是需要时间来弄清楚东西,尤其是把它写下来。

php mysqli null return-value mysql-num-rows
2个回答
2
投票

对于插入,您应该使用affected_rows

$rows = $success->affected_rows;
PHP受影响的行

在此处阅读有关 num_rows 的信息 PHP num_rows


1
投票

作为运行 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 手册在这方面不是很好,但它确实说明了这一点

这也解释了为什么

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

不能工作,因为

$success
不是一个对象。

还有为什么

$success->store_result();

不起作用。

$success
不是对象,没有可存储的结果。

© www.soinside.com 2019 - 2024. All rights reserved.