0

データベースのバージョン管理を容易にするスクリプトに取り組んでいます。これを行うために、セミコロンで区切られたスキーマを更新するために必要な SQL クエリを含む多数のファイル (それぞれに少なくとも 1 つのステートメントが含まれ、いくつかのファイルには 100 以上のステートメントが含まれます) があります。ステートメントの 1 つが失敗し、これらを修正する際に問題が発生することを除けば、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;
}
4

1 に答える 1

0

次の例のようにカウンター var を初期化します。反復ごとに 1 ずつ増やします。エラーが発生した場合、カウンタ var を出力します。$lineこの例では var を呼び出しました。はexit、var が出力された後、スクリプトを終了します。そうしたくない場合は、そのままにしておくことができます。

$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;
    }
    // ...
}
于 2012-12-28T15:29:50.340 に答える