2014-12-28 74 views
1

相當多的自我解釋,但由於某種原因,它始終工作,而不是工作一次(當表不存在的話)......CREATE TABLE IF NOT EXISTS總是創建新表(即使exsists)

$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即使表已經存在!!!

爲什麼?

+3

儘管表存在查詢執行並返回true值。結果你得到了這個信息。 – MH2K9

+1

即使沒有創建表,'$ create_tbl'也將爲true,因爲查詢仍然執行成功...真正的響應不是表是否已創建表,而是查詢成功/查詢失敗的結果 –

+2

您正在測試SQL字符串,而不是結果! – worldofjr

回答

1

之前我從來沒有使用過MySQLi API(總是使用PDO),但是它沒有返回true,因爲查詢實際上是成功的嗎?

我認爲它只會返回false如果你的連接失敗,或者這樣的錯誤。

2

如果表存在或不存在,您必須檢查,因爲$ create_tbl每次都返回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

如果SQL語句存在,沒有結果你測試。不過,您需要嚴格測試使用===(不僅僅是==或直接測試變量)來成功執行語句。從查詢中刪除IF NOT EXISTS,然後像這樣測試;

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

但「如果不存在」意味着查詢將成功執行,即使該表存在。 –

+0

公平點。刪除「IF NOT EXISTS」。回答編輯。 – worldofjr

1

我剛剛刪除了IF NOT EXISTS,它就像一個魅力!感謝@Mark Ba​​ker指出了這一點! :)

相關問題