PHP Mysql案例不敏感表选择

时间:2012-07-16 18:29:02

标签: php mysql

我正在尝试检测数据库中的表是否已存在。但是,我写的以下代码似乎区分大小写。如果表名是Test,$ name = TEST。下面的代码不是真的。有没有办法使这个案例不敏感?或者也许有一种更有效的方式?

if(mysql_num_rows(mysql_query("SHOW TABLES LIKE '$name'")) == 1) {
    ....
}

4 个答案:

答案 0 :(得分:2)

抱歉,使用该语法无法完成。你必须做类似的事情:

SELECT `TABLE_NAME`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE `TABLE_CATALOG` IS NULL
AND `TABLE_SCHEMA` = 'yourdatabasename'
AND `TABLE_NAME` LIKE 'yourtablename'

答案 1 :(得分:2)

$name = "table_name";
$result = mysql_list_tables("mydb");
$num_rows = mysql_num_rows($result);
for ($i = 0; $i < $num_rows; $i++) {
    if (strtolower(mysql_tablename($result, $i)) == strtolower($name)) {
        echo "Table detected";

    }
}

答案 2 :(得分:1)

确保检查 lower_case_table_names 系统变量的值。默认值是根据您的操作系统分配的:

  • 0 - UNIX / Linux

  • 1 - Windows

  • 2 - Mac

根据MySQL docs

  
      
  • 0 - 使用表格和数据库名称存储在磁盘上   CREATE TABLE或CREATE DATABASE语句中指定的lettercase。   名称比较区分大小写。您不应该设置此变量   如果您在不区分大小写的系统上运行MySQL,则为0   文件名(例如Windows或Mac OS X)。如果强制使用此变量   在不区分大小写的文件系统上使用--lower-case-table-names = 0到0   并使用不同的lettercase,index访问MyISAM表名   可能会导致腐败。

  •   
  • 1 - 表名以小写形式存储在磁盘上   和名称比较不区分大小写。 MySQL转换所有表   存储和查找时,名称为小写。此行为也适用   到数据库名称和表别名。

  •   
  • 2 - 表和数据库名称是   使用CREATE TABLE或中指定的lettercase存储在磁盘上   CREATE DATABASE语句,但MySQL将它们转换为小写   抬头。名称比较不区分大小写。这只适用于   文件系统不区分大小写! InnoDB表名是   以小写形式存储,与lower_case_table_names = 1一样。

  •   

当然,您可以更改 lower_case_table_names 的值,但是您需要导出/导入数据才能影响当前的数据库表。

答案 3 :(得分:0)

感谢您的回答,但似乎我已经回答了我自己的问题。我只是使用strtolower()

将所有表存储为小写

然后:

$LowerName = strtolower($name);
if( mysql_num_rows( mysql_query("SHOW TABLES LIKE '$LowerName'")) == 1)
{
   ....
}