gpt4 book ai didi

php - PDO 忽略共享主机上的 PDO::CASE_NATURAL

转载 作者:行者123 更新时间:2023-11-29 00:13:36 32 4
gpt4 key购买 nike

在我的本地开发机器 (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']//输出 zcbc

某处将我之前混合大小写的字符串转换为全部小写。 $_GET 变量和 MySQL 条目都是大小写混合的字符串。

最佳答案

PDO::ATTR_CASE 设置 COLUMNS 的大小写处理...如果我没理解错的话,你会得到条目的 VALUE用错了大小写?

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

对于单个查询,您可以像这样使用不同的排序规则:

SELECT * FROM
uploads
WHERE
slug COLLATE utf8_bin = :slug
LIMIT 1

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

ALTER TABLE `tablename` COLLATE utf8_bin

关于php - PDO 忽略共享主机上的 PDO::CASE_NATURAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23769324/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com