返回mySQL错误,错误时不返回任何内容


returning mySQL errors from nothing being returned on error

我有一个php文件,它执行一系列插入查询。如果任何查询生成错误,我希望返回错误消息和查询字符串,并回滚所有查询

到目前为止,我有这个:

mysql_query("SET autocommit=0;");
mysql_query("BEGIN;");
$sql ="SOME MALFORMED QUERY";
mysql_query($sql);
if(mysql_error()){
    mysql_query("rollback;");
    $arr = array("returnCode" => 0, "returnMessage" => "Query failed: " .$sql. mysql_error());
    echo json_encode($arr);
    die();
}

然而,在javascript中,我看到的返回消息JSON字段中返回的只是"Query failed:"。知道为什么吗?

问题出在ROLLBACK查询上:如手册中所述,mysql_error从lastmysql函数返回错误文本。由于您再次使用了mysql_query,所以前面的错误已经丢失。

我建议这个代码:

mysql_query("SET autocommit=0;");
mysql_query("BEGIN;");
$sql ="SOME MALFORMED QUERY";
mysql_query($sql);
$error = mysql_error();
if($error){
    mysql_query("rollback;");
    $arr = array("returnCode" => 0, "returnMessage" => "Query failed: $sql, Error: $error");
    echo json_encode($arr);
    die();
}

在出现错误的情况下执行ROLLBACK似乎毫无用处。手册解释道:回滚可能是一种缓慢的操作,在用户没有明确要求的情况下(例如,发生错误时),它可能会隐式发生

以下代码就足够了:

mysql_query("SET autocommit=0;");
mysql_query("BEGIN;");
$sql ="SOME MALFORMED QUERY";
mysql_query($sql);
if(mysql_error()){
    $arr = array("returnCode" => 0, "returnMessage" => "Query failed: $sql, Error: ".mysql_error());
    echo json_encode($arr);
    die();
}

不应该

$arr = array("returnCode" => 0, "returnMessage" => "Query failed: " .$sql. sql_error());

$arr = array("returnCode" => 0, "returnMessage" => "Query failed: " .$sql. **mysql_error()**);

可能表达式"Query failed: " .$sql. sql_error()的格式不正确。正确的形式是:

"Query failed: " . $sql . mysql_error()

我会使用PDO及其内置的事务支持。

<?php
// create PDO instance as $db here
// don't forget to set error mode to 'exception'
try {
    $db->beginTransaction();
    // do your queries here, i.e. $db->exec('BOGUS');
    $db->commit();
}
catch (Exception $e) {
    $db->rollBack();
    echo 'Error: ' . $e->getMessage();
}

当抛出异常消息时,它会将遇到的任何错误作为异常消息提供给您。