Mysql RENAME总是使用mysql_query返回false

时间:2012-01-24 13:55:36

标签: php mysql return-value

这是一个非常简单的代码:

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

但它总是打印“Rename aborted”。

我在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,但没有工作.. 知道重命名是否有效的任何想法? (没有其他查询,例如SELECTSHOW TABLES等)。

谢谢!

3 个答案:

答案 0 :(得分: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) 

毕竟,RENAME TABLE似乎工作正常。对php.net的评论显然是错误的,我在第一次测试时和他一样错了。

我要感谢 Fahim Parkar 指出解决方案, Leigh 为我提供替代方案;)

如果出现问题,请告诉我!

答案 1 :(得分:0)

RENAME TABLE换行到成功执行SELECT 1 AS STATUS之类的存储过程

答案 2 :(得分:0)

询问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