2012-12-28 70 views
0

我正在研究一个脚本,以便更容易地对数据库进行版本控制。为了做到这一点,我们有许多文件(每个文件至少包含一条语句,一对包含超过一百条语句),其中包含SQL查询,我们需要更新使用分号分隔的模式。它在90%的时间内很好地工作,除非偶尔有一个陈述会失败,并且我们在解决这些问题时遇到问题。发生这种情况时,我们必须删除数据库并手动复制并粘贴失败文件中的每条SQL语句以对其进行测试。某些查询会导致异常,但对于一些查询函数只是返回1从Zend_Db_Adapter :: exec获取错误消息

我用下面的代码,但我无法弄清楚如何发现运作有问题的声明:

$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; 
} 

回答

0

初始化一个计数器var,如下例所示。每次迭代增加1。当出现错误时输出计数器变量。在这个例子中我已经调用了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; 
    } 
    // ... 
}