3

データベース内のテーブルが必要な列でアセンブルされているかどうかを確認する方法を探しています。

私はこの関数を作成します:

function verifydbtable($table,$fields){
    global $fsdbh;
    foreach($fields as $field => $type){
        $verify = $fsdbh->prepare("ALTER TABLE `$table` ADD `$field` $type;");
        $verify->execute();
    }
    return 1;
}

$table更新するテーブルはどこにあり、$fieldsチェックするすべてのフィールドの配列が含まれています。$typeフィールドのタイプが含まれます。VACHAR(20)

この関数は、すでに存在するフィールドに遭遇するまで、各フィールドに対して機能します。次に、falseを返します。

問題は、配列の残りの列をチェックしないことです。残りのフィールドをチェックし続けるにはどうすればよいですか。

#1060 - Duplicate column name 'subtitle'列がすでに存在する場合、それが行うべきエラーを返すという事実が原因です。このエラーが返された場合は、配列内の次の項目にスキップする必要があります。

素人の言葉で言えば、これが必要ですが、もちろんこれはmySQLステートメントではありません。

prepare("ALTER TABLE `$table` ADD IF NOT EXIST `$field` $type");
4

2 に答える 2

2

IGNOREクエリを指定してみてください。

$fsdbh->prepare("ALTER IGNORE TABLE `$table` ADD `$field` $type;");
于 2012-08-23T17:23:19.257 に答える
1

トライキャッチを使用します。

function verifydbtable($table,$fields){
    global $fsdbh;
    $errors = array();
    foreach($fields as $field => $type){
        $verify = $fsdbh->prepare("ALTER TABLE `$table` ADD `$field` $type;");
        try {
          $verify->execute();
        } catch (PDOException $e) {
           // you might want to check and make sure its actually the right error
           // but you can figure that out if when you need to do so
           // we'll also store the field name in an array jsut in case we want to use it
           $errors[] = $field;
        }
    }

     return 1;
}
于 2012-08-23T17:57:32.420 に答える