PHP:mysqli_query和die()

时间:2013-09-22 04:43:41

标签: php

代码:

我正在测试下面的简单代码,以便将数据插入我的数据库:

mysqli_query($con,"INSERT INTO Persons (Age) VALUES (35) WHERE FirstName='John'") or die("Error");

在我的数据库中,我没有FirstName=John行(它是测试的一部分)。

我期待看到的内容:

因为我的数据库中FirstName=John没有行,所以我希望die()向我发送错误消息。

问题:

Die()没有向我发送错误消息。事实上,我发现die()只在无法连接到db时才向我发送错误消息。

我的想法:

好吧,可能是die()的工作原理......但是,如果由于没有连接而没有执行查询,如何获得通知?

5 个答案:

答案 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, DESCRIBEEXPLAIN次查询,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);
}