2014-12-28 1 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!!"; 
} 

всегда echo Table has created, даже если таблица уже существует !!!

Почему?

+3

Хотя таблица существует, запрос выполняется и возвращает истинные значения. В результате вы получили это сообщение. – MH2K9

+1

'$ create_tbl' будет правдой, даже если таблица не была создана, потому что запрос все еще успешно выполнен ... истинный ответ заключается не в том, была ли создана таблица или нет, это результат неудачного запроса запроса/запроса –

+2

Вы тестируете строку SQL, а не результат !!! – worldofjr

ответ

1

Я никогда не работал с API MySQLi (всегда используя PDO), но не возвращает ли он true, потому что запрос действительно был успешным?

Я думаю, что он возвращает только false, если ваше соединение не удалось, или ошибка, подобная этой ошибке.

2

вы должны проверить, если таблица exsit или нет, потому что $ 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 Baker за это! :)

Смежные вопросы