2015-11-06 57 views
1

我目前正在使用ADODB库的网站上工作。在整个网站中,所有查询均以大写字母书写。如何解决在php和mysql中的mysql大写查询

问题是当我运行查询它不工作,因为表名是大写。但是,当我将表名改为小写时,它就起作用了。

$sql = "SELECT * FROM MEMBERS where USERNAME = '$username'"; 

$db = ADONewConnection('mysql'); 
$db->debug = true; 
$db->Connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_NAME); 

$resultFriends = $db->Execute($sql); 

while ($row = $resultFriends->FetchRow()) { 
     var_dump($row); 
     die; 
} 

这里是我的错误:

ADOConnection._Execute(SELECT * FROM成员其中username = '愤怒',虚假)%线1012,文件:adodb.inc.php

ADOConnection.Execute(SELECT * FROM成员其中username = '愤怒')%15行,文件:的index.php

请记住我不想更改脚本。有1000个文件和10000个地方。

有没有任何图书馆或有任何方式,我可以无误地运行此查询?

+0

您有多少个查询?如果它不是太多,可能值得通过,只是正确地更新案例。 – Mike

+1

@ Fred-ii-即使它确实有效,您仍然需要单独更新每个查询,对吧? – Mike

+0

该网站正在现场服务器工作。我无法改变表格。尽管代码是血腥的意大利面和旧的 – Fury

回答

1

活的父系的版本是linux内核。但新的开发网站是Ubuntu的。

我已经在ubuntu/mysql CML上做了这件事,它没有工作。

的解决方案是,我不得不重新配置AWS/RDBS

您必须修改“的lower_case_table_names”参数为您的数据库实例(S)的MySQL数据库。在今天之前,lower_case_table_names参数是不可修改的,系统默认值为零(0)或“表名称按指定存储,比较区分大小写”。立即开始,值为零和一(表名称以小写形式存储并且比较不区分大小写)。有关lower_case_table_names参数的更多信息,请参阅MySQL文档。

可以通过rds-modify-db-parameter-group API指定lower_case_table_names参数。简单地包括参数名称,并指定所希望的值,如在下面的例子:

用于经由AWS管理控制台修改参数
rds-modify-db-parameter-group example --parameters "name=lower_case_table_names, value=1, method=pending-reboot" --region us-east-1 

支持预计今年稍后加入。

通过自定义数据库参数组设置lower_case_table_names参数,并在创建关联数据库实例之前这样做。更改现有数据库实例的参数可能会导致与时间点恢复备份和只读副本的不一致。

Amazon RDS

+0

但请记住,这个paremeter会导致mysql以小写形式存储所有表名*当您创建表*并修改查询时*您运行它的那一刻*。我不认为像'userGroupMapping'这样的现有表格会被转换。也取决于mysql如何处理该参数,这可能无法正常工作。 (例如,如果它确实检查'userGroupMapping == tolower(USERGROUPMAPPING)'在内部导致它认为每个表名*被存储*小写) – dognose

+0

编辑:是的,文档说'如果你打算在Unix上将lower_case_table_names系统变量设置为1 ,您必须先将旧数据库和表名称转换为小写,然后再停止mysqld并使用新变量设置重新启动它。“https://dev.mysql.com/doc/refman/5.6/en/identifier-case-sensitivity。 HTML – dognose