首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在共享主机上忽略PDO::CASE_NATURAL

问在共享主机上忽略PDO::CASE_NATURAL
EN

Stack Overflow用户
提问于 2014-05-20 20:28:40
回答 1查看 899关注 0票数 1

在本地开发机器(MAMP)上,我的MySQL查询返回正确的大小写。然而,在我的共享主机服务器上,当使用fetch(PDO::FETCH_ASSOC);时,结果是小写的。

我试过以下几种方法:

代码语言:javascript
复制
$db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);

但它似乎没有效果,我错过了什么?

示例:

代码语言:javascript
复制
$findUpload = $db->prepare('
    SELECT * FROM
        uploads
    WHERE 
        slug = :slug
    LIMIT 1
');
$findUpload->execute(array(
    ':slug' => $_GET['entry']
));

$_GET['entry']是Zcbc

当我这么做

代码语言:javascript
复制
$getUpload = $findUpload->fetchAll(); // switched to fetchAll temporarily 
$singleUpload = $getUpload[0];

echo $singleUpload‘’slug‘// ouput zcbc

将以前混合的大小写字符串转换为所有小写。$_GET变量和MySQL条目都是混合大小写字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-22 12:09:38

PDO::ATTR_CASE设置列的案例处理。如果我正确地理解了您,那么您将得到带有错误情况的条目的值?

您是否使用PHPMyAdmin或类似工具运行了查询?我怀疑您有多个条目具有相同的弹格,但不同的大小写拼写(pdc对pDc)。由于您使用的是不区分大小写的排序规则(_ci),因此您可能会得到一个拼写不同的条目,而不是您预期的拼写。

对于单个查询,可以使用如下所示的不同排序规则:

代码语言:javascript
复制
SELECT * FROM
    uploads
WHERE 
    slug COLLATE utf8_bin = :slug
LIMIT 1

如果希望此行为成为默认行为,则可以更改整个表的排序规则。

代码语言:javascript
复制
ALTER TABLE `tablename` COLLATE utf8_bin
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23769324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档