在我的本地开发机器(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']//ouputszcbc
把我以前的大小写混合字符串转换成小写。$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

08-19 04:32