CREATE TABLE IF NOT EXISTS总是创建新表(即使存在)

时间:2014-12-28 14:22:10

标签: php database mysqli create-table

几乎是自我解释但由于某种原因,它总是起作用而不是工作一次(当表不存在时)......

$mysqli = mysqli_connect('localhost','user','pass','databasename');

$create_table =
'CREATE TABLE IF NOT EXISTS student  
(
    `1` longtext NOT NULL,
    `2` longtext NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;';

$create_tbl = $mysqli->query($create_table);

if ($create_table) {
    echo "Table has created";
}
else {
        echo "error!!";  
}

即使表已经存在,它总是回显Table has created !!!

为什么?

4 个答案:

答案 0 :(得分:2)

如果表格存在与否,您必须先检查,因为 $ create_table 每次都会返回1。 所以在

之前运行SHOW TABLES LIKE 'student'
$mysqli = mysqli_connect('localhost','root','root','test');

$create_table =
'CREATE TABLE IF NOT EXISTS student  
(
    `1` longtext NOT NULL,
    `2` longtext NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;';


if(mysqli_num_rows($mysqli->query("SHOW TABLES LIKE 'student'")) !=1) {
    $create_tbl = $mysqli->query($create_table);
} else {
     echo "error!!";  
}

答案 1 :(得分:1)

之前我从未使用过MySQLi API(始终使用PDO),但它没有返回true,因为查询实际上是成功的?

我认为只有在您的连接失败或类似错误时才会返回false。

答案 2 :(得分:1)

您正在测试SQL语句是否存在,而不是结果。然而,您需要使用===(不仅仅是==或直接测试变量)严格测试语句的成功执行。从查询中删除IF NOT EXISTS,然后像这样进行测试;

if ($create_tbl === true) {
    echo "Table was created";
}
else {
    echo "Error!!";
}

答案 3 :(得分:1)

我刚删除了IF NOT EXISTS,它就像一个魅力!感谢@Mark Ba​​ker指出这一点! :)