使用php处理数据库异常

时间:2013-09-27 19:46:23

标签: php mysql

当我尝试删除用户时,会显示此异常(错误)。

Error: the XML response that was returned from the server is invalid.
Received:
Cannot delete or update a parent row: a foreign key constraint fails                         
(`db_almacen`.`perfil_solicitud_material`, CONSTRAINT `perfil_solicitud_material_ibfk_1`
FOREIGN  KEY (`id_usuario`) REFERENCES `usuario` (`id_usuario`))

它以这种方式显示,因为我有一个与我的用户ID相关的外键。 我想显示一个不同的消息,而不是那个。我怎么能这样做我检查php例外手册,但我没有找到一个例子,请帮助我。 我正在使用Mysql和PHP 我的PHP代码

$query = "DELETE FROM unidad_solicitante where id_unid_sol ='$cod';";
$result = mysql_query($query) or die(mysql_error()); 

谢谢

3 个答案:

答案 0 :(得分:1)

不要使用mysql_ functions http://pl1.php.net/mysql_query

看到红色框?它们被弃用,不安全,一般来说使用它们是个坏主意。

如果您希望PHP代码抛出实际Exception,请使用PDO;如果您想生成安全代码,请使用PDO;如果你不想要SQL注入的黑暗恶魔(也适用于脚本小子)让你的网站失效,请使用......你知道:) mysql_函数是错误的,mysql_函数是邪恶的,mysql_函数正在唤醒黑暗势力,mysql_函数会偷走你孩子的冰淇淋,mysql_函数在参议院投票,mysql_函数不喂他们的狗; mysql_函数会在晚上困扰你; mysql_功能正在街头卖毒品;

您的查询代码的这个片段:='$cod';似乎很脆弱,所以请阅读以下内容: How can I prevent SQL injection in PHP?

使用PDO,您可以使用通常的try{} catch(...){}块处理任何异常;

如果你不能使用PDO或者真的不想,你应该检查mysql_query()是否返回true,如果没有,那么你的错误信息将由mysql_error()返回,所以它会是这样的:

$result = mysql_query(...);
if(!$result) {
    $error = mysql_error();
    // .. handle
}

答案 1 :(得分:0)

任何mysql错误都会触发or die(...),因为mysql_query()将返回一个普通的布尔值FALSE来表示失败。如果你想从die()中豁免某些错误条件,你必须明确地测试它们:

$result = mysql_query(...);
if ($result === FALSE) {
    switch(mysql_errno()) {
      case 1216: ... foreign key error ...
      case xxx: ...
      default:
            die(mysql_error());
    }
}

错误代码在此处定义:http://dev.mysql.com/doc/refman/5.6/en/error-messages-server.html

答案 2 :(得分:0)

负责显示数据库错误的代码如下:

die(mysql_error())
  • die()函数终止脚本并显示消息
  • mysql_error()输出与执行MySQL查询相关的最后一个错误

如果要显示自己的消息,请使用以下代码:

if(mysql_query($query)) {
    echo 'success';
}
else {
    echo 'error';
}