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).

该函数适用于每个字段,直到遇到已经存在的字段。然后它返回假。

问题是它不会检查数组中的剩余列。我们如何让它继续检查剩余的字段。

由于如果一个列已经存在,它将返回一个错误#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 回答