【问题标题】:Mysql PDO not inserting serialized php data properly (cuts off at ´ symbol)?Mysql PDO 没有正确插入序列化的 php 数据(在 ´ 符号处截断)?
【发布时间】:2012-06-13 02:10:40
【问题描述】:

我在 php 中序列化一些数组并将它们插入到 mysql TEXT 列中。

某些数据插入不正确。一个插入语句的例子,

$q = $this -> dbc -> prepare("INSERT INTO table (files) VALUES(?)");
$q -> execute(array(serialize($files)));

$files 数组的strlen 的值小于 65,000 的值,因此不会因为最大插入到 TEXT mysql 列而被缩短。

插入前serialized($files)的数据,

string 'a:4:{s:4:"CD 1";a:20:{s:32:"01 - Can´t Talk To That Girl.mp3";i:4558470;s:22:"02 - No Pla // CONTINUES FOR SOME TIME

从数据库中获取$files 的值,

a:4:{s:4:"CD 1";a:20:{s:32:"01 - Can

它似乎在字符 ´ 处缩短了,我对 PDO 的理解是它会正确地转义准备查询的所有字符?

请注意我的 PDO 连接设置为 UTF-8?

我怎样才能阻止这种情况发生?

谢谢

编辑

我可以确认这是由于将连接设置为UTF-8 对 PDO 为何会这样做有任何想法吗?

【问题讨论】:

标签: php mysql pdo prepared-statement


【解决方案1】:

php中的“´”反引号字符是系统的快捷方式(“反引号之间的文本”)

manual

您需要检查它是否被正确引用或转义。

【讨论】:

    【解决方案2】:

    尽量不深入字符编码的兔子洞;通过确保您的字符串是 UTF-8 来获得更多的运气:

    $q = $this -> dbc -> prepare("INSERT INTO table (files) VALUES(?)");
    $q -> execute( array( utf8_encode( serialize( $files ) ) ) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2017-03-24
      • 2013-02-09
      相关资源
      最近更新 更多