php函数没有向数据库表添加列

时间:2015-02-20 08:27:37

标签: php mysql database

我遇到了一个非常普通的php函数。

它背后的想法是在表中添加(TEXT类型)列(如果它不存在)。我的php如下:

function add_column($conn, $table, $colname){

    // Prepare and execute statment 1
    $sql = $conn->prepare("SHOW COLUMNS FROM $table LIKE '$colname'");
    if (!$sql->execute()){

        // Prepare and execute statment 2
        $sql1 = $conn->prepare("ALTER TABLE `ExamServer`.$table ADD `$colname` TEXT");
        $sql1->execute();
    }
}

感谢任何帮助,谢谢!谢谢!

2 个答案:

答案 0 :(得分:2)

  

您可以使用以下查询检查列是否存在:

SHOW COLUMNS FROM  `$table` WHERE field = '$colname'

如果有列,您将获得一行。如果没有,您可以执行ALTER查询。

if($sql->num_rows == 0) {
    // Perform your alter query here
}

答案 1 :(得分:2)

第一期:第一份准备好的声明。

而不是检查第一个语句是否产生true或false,因为您正在检查此行是否存在,而只需使用->num_rows

第二期:第二份准备好的声明。您的COLUMN中的查询缺少ADD,因此应该是:

ALTER TABLE $table ADD COLUMN $colname TEXT

最终代码:

$sql = $conn->prepare("SHOW COLUMNS FROM $table LIKE '%$colname%'"); // add wildcard
$sql->execute();
if($sql->num_rows <= 0) { // if this column does not exist, do the if block
    $sql->store_result(); // this line is important for the second prepared statement to work
     // Prepare and execute statment 2
    $sql1 = $conn->prepare("ALTER TABLE $table ADD COLUMN $colname TEXT");
    $sql1->execute();
}

最后注意事项:如果这是用户输入并希望绑定它们,则无法绑定标识符,但您可以将它们列入白名单。