寻找一种方法来检查数据库中的表是否已使用所需的列进行汇编。
我建立了这个功能:
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");
答案 0 :(得分:2)
您可以尝试为查询指定IGNORE
:
$fsdbh->prepare("ALTER IGNORE TABLE `$table` ADD `$field` $type;");
答案 1 :(得分:1)
使用try catch:
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;
}