1

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

一些数据被错误地插入。插入语句的示例,

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

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

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-8PDO 为何会这样做的任何想法的连接?

4

2 回答 2

1

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

手册

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

于 2012-06-13T05:03:45.573 回答
0

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

$q = $this -> dbc -> prepare("INSERT INTO table (files) VALUES(?)");
$q -> execute( array( utf8_encode( serialize( $files ) ) ) );
于 2012-06-13T02:47:07.490 回答