gpt4 book ai didi

php - PDO 和 Mysql 字符集

转载 作者:行者123 更新时间:2023-11-30 23:14:07 29 4
gpt4 key购买 nike

我最近为许多项目切换到 PDO(使用 mysql/i 驱动程序的时间太多了),遇到了 PDO Mysql 驱动程序和字符集的奇怪行为。我在 StackOverflow 上发现使用 pdo 和 mysql 初始化 utf8 连接的正确方法是在 DSN 末尾添加 Charset=utf8。然而这个参数在 5.3.6 之前的 php 版本中被默默地忽略了。由于我正在开发一个cms,我不知道它会在哪个环境上运行;我正在寻找使其兼容的解决方案。

我找到的第一个答案是使用 $PDO->exec("SET NAMES utf8");这与发出查询不一样吗,所以,它会把转义函数搞得一团糟。

第二个答案是将 PDO::MYSQL_ATTR_INIT_COMMAND 设置为 SET NAMES utf8,那不是和以前一样吗? (所以打破转义功能?)

其实我对此有点困惑,所以我决定寻求帮助。我还想到了两种解决方案:

1) 构建一个抽象层,如果是 PHP < 5.3.6,则改用 mysqli 驱动程序

2) 每次通过套接字传递数据时,使用另一个字符集并进行编码/解码

谢谢

最佳答案

别打扰了。

事实上,utf-8 使用与默认 latin1完全相同的转义规则。

因此,它不会与转义函数混淆。更不用说您根本不应该手动使用它们(尽管它们在仿真模式下静默使用)。

只要您的站点使用 utf-8,只需在 DSN 中保留 charset 并将 $PDO->exec("SET NAMES utf8");为了兼容性,您将涵盖所有可能的情况。

关于“混淆转义函数”的另一件事是,您可以关闭模拟模式,因此,只要您使用占位符 来表示您的数据查询,

$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

no escaping would be involved ever. - 所以,完全没有必要担心。

关于php - PDO 和 Mysql 字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18660735/

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