代码:
我正在测试下面的简单代码,以便将数据插入我的数据库:
mysqli_query($con,"INSERT INTO Persons (Age) VALUES (35) WHERE FirstName='John'") or die("Error");
在我的数据库中,我没有FirstName=John
行(它是测试的一部分)。
我期待看到的内容:
因为我的数据库中FirstName=John
没有行,所以我希望die()
向我发送错误消息。
问题:
Die()
没有向我发送错误消息。事实上,我发现die()
只在无法连接到db时才向我发送错误消息。
我的想法:
好吧,可能是die()
的工作原理......但是,如果由于没有连接而没有执行查询,如何获得通知?
答案 0 :(得分:2)
这很正常。如果查询失败,则mysqli_query将仅返回FALSE,即发生SQL级别。受0影响的行查询不被视为失败(就像SELECT查询的空结果不是失败一样)。在这些情况下,mysqli_query将返回TRUE。
您要做的是检查$con->affected_rows
的值以获取受上一个查询影响的行数,如果等于0,则死亡。
答案 1 :(得分:2)
您的查询是一个有效的查询,因此mysqli_query返回true,因此die不会被调用
答案 2 :(得分:1)
如手册中所述,"mysqli_query()
在失败时返回FALSE
。对于成功的SELECT, SHOW, DESCRIBE
或EXPLAIN
次查询,mysqli_query()
将返回mysqli_result object
。对于其他成功的查询mysqli_query(
),将返回TRUE."
如果没有FirstName=John
您可以使用mysqli_affected_rows
返回插入的行数
答案 3 :(得分:0)
Die()
因为查询成功运行而未激活。它只是没有更新任何内容,因为没有名字为John
的行。
您应该与affected_rows
核对,看看是否有任何行被查询修改过。
答案 4 :(得分:0)
你的sql没有错误,只是你没有一行,你可以用结果数量做一个if,如果这是你要弄清楚的 在这里,你有一个程序和面向对象的解决方案。
http://php.net/manual/en/mysqli.query.php
在你的情况下知道是否有错误:
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
或了解结果
if ($result = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
printf("Select returned %d rows.\n", mysqli_num_rows($result));
/* free result set */
mysqli_free_result($result);
}