从php返回mySQL错误 - 错误时没有返回任何内容

时间:2012-08-01 11:56:13

标签: php mysql

我有一个执行一系列插入查询的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:'。知道为什么会这样吗?

4 个答案:

答案 0 :(得分:1)

问题在于您的ROLLBACK查询:如手册中所述,mysql_error会从最后 MySQL函数返回错误文本。由于您再次使用了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似乎毫无用处。 manual解释说: 回滚可能是一个缓慢的操作,可能会隐式而没有用户明确要求它(例如,发生错误时)

以下代码就足够了:

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();
}

答案 1 :(得分:0)

不应该

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

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

答案 2 :(得分:0)

表达式"Query failed: " .$sql. sql_error()可能没有很好地形成。 正确的形式是:

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

答案 3 :(得分:0)

我使用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();
}

当它抛出异常消息时,它将为您提供任何错误。