在我的本地开发机器(MAMP)上,MySQL查询返回正确的大小写。但是在我的共享主机服务器上,当使用fetch(PDO::FETCH_ASSOC);
时,我的结果是小写的
我试过以下方法:
$db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
但似乎没有效果,我缺了什么?
例子:
$findUpload = $db->prepare('
SELECT * FROM
uploads
WHERE
slug = :slug
LIMIT 1
');
$findUpload->execute(array(
':slug' => $_GET['entry']
));
$_GET['entry']
是Zcbc
当我这样做的时候
$getUpload = $findUpload->fetchAll(); // switched to fetchAll temporarily
$singleUpload = $getUpload[0];
echo$singleUpload['slug']//ouputs
zcbc
把我以前的大小写混合字符串转换成小写。$GET变量和MySQL条目都是混合大小写字符串。
最佳答案
PDO::ATTR_CASE
设置列的案例处理。。。如果我对你的理解是正确的,你就得到了一个有错误情况的条目的值?
您使用PHPMyAdmin或类似工具运行查询吗?我怀疑你有多个条目有相同的弹头,但不同的情况拼写(pdc vs pdc)。由于您使用的是不区分大小写的排序规则(_ci),因此可能会得到一个拼写与您提供的不同的条目,而不是您期望的条目。
对于单个查询,可以使用不同的排序规则,如下所示:
SELECT * FROM
uploads
WHERE
slug COLLATE utf8_bin = :slug
LIMIT 1
如果希望将此行为设置为默认值,可以更改整个表的排序规则。
ALTER TABLE `tablename` COLLATE utf8_bin