从Zend_Db_Adapter :: exec()获取错误消息

时间:2012-12-28 14:55:19

标签: zend-framework database-versioning

我正在编写一个脚本,以便更轻松地对数据库进行版本控制。为了做到这一点,我们有许多文件(每个文件至少包含一个语句,一对包含超过一百个)包含我们需要更新使用分号分隔的模式的SQL查询。它可以很好地工作90%的时间,除了偶尔其中一个语句会失败,我们在修复这些问题时遇到了问题。发生这种情况时,我们必须删除数据库并手动复制并粘贴失败文件中的每个SQL语句以对其进行测试。某些查询会导致异常,但对于某些查询,该函数只返回1。

我正在使用以下代码,但我无法弄清楚如何找到有问题的声明:

$db = Zend_Db_Table::getDefaultAdapter();

try{
    // loop through all the files
    foreach($files as $file){
        echo 'Running ', $file, PHP_EOL;

        // use the connection directly to load sql in batches
        if($db->exec(file_get_contents($dir . $file)) == 1){
            // *how do I get the problem line here?*
            return false;
        }

        $db->exec('INSERT INTO database_history SET file = "' . $file .'";');
    }
} catch (Exception $e) {
    echo 'AN ERROR HAS OCCURED:' . PHP_EOL;
    echo $e->getMessage() . PHP_EOL;
    return false;
}

1 个答案:

答案 0 :(得分:0)

初始化计数器var,如下例所示。每次迭代增加一次。出现错误时输出计数器var。我在这个例子中调用了var $line。在输出var之后,exit终止脚本。如果你不想那样,你可以把它留下来。

$line = 0;
foreach($files AS $file){
    $line++;
    // ...
     if($db->exec(file_get_contents($dir . $file)) == 1){
        echo '<pre>'; print_r($line); echo '</pre>'; exit;
        return false;
    }
    // ...
}