PHP:try/catch失败

PHP:try/catch失败,php,mysql,exception,laravel-3,Php,Mysql,Exception,Laravel 3,我正在用PHP5.4.16运行Wamserver2.4(32位),这是一个Laravel3项目 在try块中(我预计会失败),我提交了一个重复的行,以根据唯一性约束进行插入。 它不是在catch中处理异常,而是从try块抛出一个“未处理的异常”错误并失败 // This throws an error if the relationship already exists. // If that happens, just pass it to the logger and mov

我正在用PHP5.4.16运行Wamserver2.4(32位),这是一个Laravel3项目

try
块中(我预计会失败),我提交了一个重复的行,以根据唯一性约束进行插入。
它不是在
catch
中处理异常,而是从
try
块抛出一个“未处理的异常”错误并失败

    // This throws an error if the relationship already exists.
    // If that happens, just pass it to the logger and move on.
    try {
        $entity->$pivotMethod()->attach( $rowData->get_key(), $ext );
    } catch (Exception $e) {
        $err = $e->getMessage()."\n";
        error_log($err);
    }
下面是它抛出的错误: 未处理的异常

信息:

SQLSTATE[23000]:完整性约束冲突:1062重复条目“695d7f0b-53b8-11e3-93fc-c12677e410a5-0-0-14-”用于键“唯一”

SQL:在
联系人
联系人id
电话id
)中插入值(?,)
绑定:数组(0=>695d7f0b-53b8-11e3-93fc-c12677e410a5',1=>14)

位置:C:\path\to\laravel\3\u 2\u 13\database\connection.php,第263行


根据你的评论,这是你的问题

namespace Something;

class myClass {

    function method() {
          try {
        $entity->$pivotMethod()->attach( $rowData->get_key(), $ext );
       } catch (Exception $e) {
        $err = $e->getMessage()."\n";
        error_log($err);
       }
    }
}
在本例中,您输入的是提示您正在捕获异常,但没有指定范围,因此PHP假定您正在捕获
\Something\exception

解决方法非常简单。添加一个
\
告诉PHP捕获属于或扩展基本
异常的任何内容

catch (\Exception $e)

如果没有抛出异常,它将永远不会到达catch块+1是的!您必须抛出Exceptions您的块是否位于命名空间内的类中?请尝试
\Exception
而不是执行该操作的
Exception
(命名空间)!感谢来自德国的@Machavity和#Dan。。你们太聪明了:)+1我希望你们不仅仅是从评论中得到这个答案,DanFromGermany首先发现了:)我知道这个解决方案,因为几个月前我也遇到了同样的问题,但他的猜测首先出现的是你们上面的块是在命名空间中的类中吗?你很好不,这就是为什么我问它是否在名称空间中。我以前遇到过这种问题。当您这样键入提示时,PHP变得非常具体。除非您知道将捕获特定类型的异常,否则几乎总是最好使用
\exception