0

我试图弄清楚我应该如何解决这个问题。当我有一个 MySQLi 查询失败时,它会自动终止脚本的其余部分。例如

//Pure example code
$data = $mysqli->prepare("somequery");
$data->execute(); // Execute the prepared query.
//If the query above fails, the rest of the script doesn't get executed.

基本上,我试图弄清楚当查询失败时如何阻止 PHP 终止脚本。有任何想法吗?由于假定的性能和安全性收益,我转向准备好的声明。重写所有内容以计划旧查询会很痛苦。

谢谢,

4

3 回答 3

3

您需要实际检查是否成功,而不是盲目地执行$data->execute()when datamay be false,这将引发错误并中止您的脚本。

从文档中,prepare...

如果发生错误,则返回语句对象或 FALSE。

于 2013-01-07T05:03:18.613 回答
1

PHP 杀死致命错误的脚本。如果此行失败:

$data = $mysqli->prepare("somequery");

PHP 不会杀死您的脚本,而是$data设置为 false。该脚本将在下一行被终止:

$data->execute();

出现以下错误:

Fatal error: Call to a member function execute() on a non-object in...

首先,您需要启用error_reporting,以便您能够自己诊断问题(并可能找出解决方案)。其次,正如@meagar 提到的,检查 mysqli 函数的返回值:

$data = $mysqli->prepare("somequery");
if($data === false) {
    echo $mysqli->error;
    // dying isn't the most graceful approach by the way
    die();
}
if($data->execute() === false) {
    echo $mysqli->error;
    die();
}

从 mysql_* 更改为 mysqli 与您的问题无关。如果您使用的是 mysql_*,您仍然需要检查函数的返回值。一条通用规则:永远不要假设您的查询总是会成功。

于 2013-01-07T05:11:25.263 回答
0
if($data = $mysqli->prepare("somequery")) {
// binding
  $data->execute(); // Execute the prepared query.
}

文档

于 2013-01-07T05:30:55.247 回答