【发布时间】:2012-08-19 06:37:21
【问题描述】:
寻找一种方法来检查数据库中的表是否已与其所需的列组合在一起。
我构建了这个函数:
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");
【问题讨论】:
-
您是否收到任何错误消息?
-
没有错误信息。该功能运行良好。问题是如果其中一个字段已经存在,则会返回错误:#1060 - Duplicate column name 'url'。然后整个函数返回false,而不是继续处理数组中的下一项。我们需要解决这个问题。有没有办法告诉它继续如果错误。
-
您可以在 INFORMATION_SCHEMA 数据库中检查表中已有的列名,并在尝试使用 alter 语句之前将它们从数组中删除。
标签: php mysql foreach pdo alter-table