2011-05-10 107 views
4

我不想继续执行“死()”时,它仅涉及脚本的一小部分,我想:处理错误,并在PHP脚本

$result = mysql_query($sql) or echo("error with responses"); 

但它产生的错误。如何发布错误消息并继续执行脚本的其余部分,因为即使连接失败,其余部分也不应受到影响。

+4

问题标题几乎给了我一个动脉瘤。 – Charles 2011-05-10 20:39:14

+0

看,现在这是一个获得观点/回应的标题。通常只有一个致命的错误(通常是语法错误等)应该杀死一个脚本。你得到的具体错误信息是什么? – Wige 2011-05-10 20:41:53

+0

实际上,这很有趣,我看了问题列表后没有注意到我的标题,然后问我。大声笑我不想因为mysql错误而终止脚本。我想继续执行脚本的其余部分,即使它无法从db中获取数据。 – netrox 2011-05-10 20:47:38

回答

5
$result = mysql_query($sql); 
if(mysql_error()) { 
    echo "Error: " . mysql_error(); 
} 
+0

谢谢,那就是我一直在寻找的! – netrox 2011-05-10 20:44:26

+0

@netrox所以接受这个答案,你的接受比例会更高。 – 2011-05-10 20:46:23

+0

即时消息等待10分钟过期:/ – netrox 2011-05-10 20:48:13

5

根据您的原始问题标题 - 你不能。 dieexit的目的是终止脚本处理。如果您不想终止脚本处理,请不要拨打dieexit

在抑制错误输出方面,可以使用error control operator@),但这是可取的。 (您必须检查错误状态自己,如果你抑制这样的错误。)

例如,你可以使用:

$result = @mysql_query($sql); 
if(is_resource($result)) { 
    // The query worked... 

} 
else { 
    // Handle error state, perhaps using mysql_error 
} 

然而,就表明这一点,从不随便添加错误抑制器到函数调用。你必须确保你自己正确地处理任何潜在的错误。

1

检查返回类型的mysql_query

$result = mysql_query($sql); 
if ($result===false) { 

echo 'The Query failed'; 
} 

//> Continue 
0

您可以关闭错误报告,要在生产环境中做的反正。

error_reporting(0); 

它仍然会抛出错误,但不会再显示。

虽然这是非常不寻常的。我想不出为什么要接受一个mySQL错误的原因 - 如果问题是SQL被破坏,你通常会事先收到它。

+0

MySQL错误可能很好 - 例如,如果出现重复密钥错误,则会向用户显示一条消息,指出其用户名/ URL /任何已存在并继续的消息。 – ceejayoz 2011-05-10 20:41:49

+1

@ceejayoz我会倾向于事先想到。我不喜欢向最终用户显示原始SQL错误消息,即使服务器无法访问也是如此。 – 2011-05-10 20:49:19

+0

您不必显示原始错误消息。使用'mysql_errno()'来找出错误是什么,然后处理它。 – ceejayoz 2011-05-10 21:01:06

0

你应该看尝试/不会死()或退出

+1

唉,破旧的mysql扩展不会抛出异常,所以没有什么可以尝试/捕获。如果使用PDO,这是正确的。 – Charles 2011-05-10 20:42:12

+0

@charles:使用包装器层使其抛出异常或使用errorexception的另一个原因。所以有办法让它工作... – ircmaxell 2011-05-10 23:46:06

2
$result = mysql_query($sql) or print("error with responses"); 

回声不能在逻辑比较中使用,如你想要做什么。您应该使用print来代替,这不会导致PHP错误。

1

您不必使用die作为第二个函数调用,它几乎在每个mysql_query教程中都用作约定。

我们正在做的是评估一个布尔表达式。 $result = $a OR $b。如果$a的值为真,那么我们从不执行$b,因为我们不需要。我们满足逻辑OR,运营商的一方是真实的,这是我们所需要的。

die()函数立即用消息退出脚本。您可以用自己的功能替换它,以打印出错误信息,并在不退出的情况下继续执行脚本,例如:

function my_error_function($status) { 
    echo "ERROR: $status"; 
} 

$result = mysql_query($sql) or my_error_function("Uhoh. There was a problem executing $sql.");