PHP:尝试并捕获异常

时间:2012-10-02 12:30:05

标签: php mysql

这是我在PHP中的try catch

try{
    print (string)((int)$screenname+ 1);
    $query2 = 'SELECT * FROM callerdetail WHERE screenname="'.(string)((int)$screenname+ 1).'" AND status="0" AND agent = "'.$agent.'" LIMIT 1;';
    $result =   mysql_query($query2) or die (mysql_error());

}
catch(Exception $e){
    $query3 = 'SELECT * FROM callerdetail WHERE status="0" AND agent = "'.$agent.'" LIMIT 1';
    $result =   mysql_query($query3) or die (mysql_error());
}

我正在尝试根据screenname获取数据,如果它不可用,那么我想执行catch块sql语句。

不幸的是,这对我不起作用。我的数据库中有一个数据,屏幕名称= 2,但我没有获取该数据,而是获取代理的新数据

任何想法?

3 个答案:

答案 0 :(得分:4)

来自documentation

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

因此,永远不会调用您的catch块,因为mysql_query不会抛出异常。

使用if构造,或者自己抛出 异常

答案 1 :(得分:1)

为什么会抛出'异常?'没有任何事情导致“例外”。

if语句会不会更好?

$query2 = 'SELECT * FROM callerdetail WHERE screenname="'.(string)((int)$screenname+ 1).'" AND status="0" AND agent = "'.$agent.'" LIMIT 1;';
$result =   mysql_query($query2) or die (mysql_error());

if(mysql_num_rows($result) > 0 ){ // Got a result
    // Do something
) else {
    // Execute other query
    $query3 = 'SELECT * FROM callerdetail WHERE status="0" AND agent = "'.$agent.'" LIMIT 1';
    $result =   mysql_query($query3) or die (mysql_error());
}

答案 2 :(得分:0)

您在try block

中的查询中有;
$query2 = 'SELECT * FROM callerdetail WHERE screenname="'.(string)((int)$screenname+ 1).'" AND status="0" AND agent = "'.$agent.'" LIMIT 0,1';

并正确使用limit

相关问题