2012-01-24 2 views
2

Вот довольно простой код:Mysql ПЕРЕИМЕНОВАТЬ всегда возвращает ложь с mysql_query

$query = "RENAME TABLE myOldTableName TO myNewTableName"; 
$is_ok = mysql_query($query); 
echo ($is_ok) ? "Rename OK" : "Rename aborted"; 

Но alwayls печать "Rename прервана".

я нашел на php.net:

When processing a RENAME TABLE query, PHP apparently always returns false, 
no matter if the query was successfully processed or not. 

Я попытался mysql_affected_rows, но не работает .. Любая идея, чтобы знать, если переименовать работал или нет? (без другого запроса, например SELECT, или SHOW TABLES и т. д.).

Спасибо!

+0

Вы посмотрели файл журнала. – Toto

+0

Я смущен, как показано ниже. Ссылка говорит, что она вернется ** TRUE ** http://ruleant.blogspot.com/2009/03/rename-multiple-tables-in-mysql.html –

+0

@FahimParkar Wow , интересно, я буду делать тесты еще раз. –

ответ

1

Ну, после многих испытаний, мы здесь:

RENAME TABLE `mytable_a` TO `mytable_b` 
mysql_query   : bool(true) 
mysql_affected_rows() : int(0) 
mysql_info()   : bool(false) 

RENAME TABLE `tableNotExists` TO `FooBar` 
mysql_query   : bool(false) 
mysql_affected_rows() : int(-1) 
mysql_info()   : bool(false) 

ALTER TABLE `mytable_b` CHANGE `fieldFOO` `fieldBAR` INT(11) NOT NULL 
mysql_query   : bool(true) 
mysql_affected_rows() : int(42053) 
mysql_info()   : string(42) "Records: 42053 Duplicates: 0 Warnings: 0" 

ALTER TABLE `mytable_b` CHANGE `fieldNotExists` `newName` INT(11) NOT NULL 
mysql_query   : bool(false) 
mysql_affected_rows() : int(-1) 
mysql_info()   : bool(false) 

В конце концов, переименуйте TABLE, кажется, работает хорошо. Комментарий к php.net, по-видимому, ошибочен, и я поступил так же неправильно, как и на моих первых тестах.

Я хочу поблагодарить Фахим Parkar, который положил палец на раствор, и Энтропия и Leigh, которые предлагают мне альтернативный;)

Скажите мне, если что-то кажется неправильным!

0

Оберните RENAME TABLE в хранимой процедуре, которая делает что-то вроде SELECT 1 AS STATUS на успех

+0

Для внутренних нужд я не могу использовать хранимую процедуру, к сожалению. –

0

Ask к information_schema таблице:

mysql_query("SELECT COUNT(*) AS count 
FROM information_schema.tables 
WHERE table_schema = '$youDatabaseName' 
AND table_name = '$myNewTableName'"); 

Или, если вам не нравится information_schema:

mysql_query("DESCRIBE $myNewTableName"); 

, которые возвращают false для таблицы, которая не существует.

+0

Я подумал об этом, но я не хочу использовать таблицу 'information_schema', по соображениям пуриста;) Действительно, я не уверен, что таблица обновлена ​​из-за других действий девольверсов. –

+0

Эта таблица автоматически обновляется MySQL, если только они не вручную ее редактируют, она всегда актуальна;) Я отредактировал свой ответ с альтернативой. – entropid

+0

Я боюсь, что иногда они вручную редактировали его. Хорошо, я попытаюсь. –

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