2012-12-28 83 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; 
    } 
    // ... 
}