php - 使用 PDO 通过 PHP 保存到 mysql 时字符串发生变异

标签 php mysql unicode pdo

这是sql:

INSERT INTO stepup (target, body) VALUES ('http://test.com/dev-ws/events', '{"username":"Unknown","verb":"answer","object":"http:\/\/localhost\/elgg\/answers\/view\/42954\/q1","context":{"course":"42902","phase":"1","widget_type":"questions","activity_id":"95c48","widget_title":"Wonder moment"},"originalrequest":{"value":{"description":"<p>\u041f\u0440\u043e\u0443\u0447\u0432\u0430\u043d\u0435<\/p>","question_id":42954}},"starttime":"2015-03-26 17:28:57 +0100","endtime":"2015-03-26 17:28:57 +0100"}')

然后我做$conn->exec($sql);

但是body的实际内容在数据库(mysql)中是:

"{\"username\":\"Unknown\",\"verb\":\"answer\",\"object\":\"http://localhost/elgg/answers/view/42954/q1\",\"context\":{\"course\":\"42902\",\"phase\":\"1\",\"widget_type\":\"questions\",\"activity_id\":\"95c48\",\"widget_title\":\"Wonder moment\"},\"originalrequest\":{\"value\":{\"description\":\"<p>u041fu0440u043eu0443u0447u0432u0430u043du0435</p>\",\"question_id\":42954}},\"starttime\":\"2015-03-26 17:28:57 +0100\",\"endtime\":\"2015-03-26 17:28:57 +0100\"}"

所以 \uu 取代:(

我能做什么..我认为通过不“准备”SQL,这将停止发生......

最佳答案

您似乎正在将 JSON 内容注入(inject)到查询中的 SQL 字符串文字中。您可能有 SQL 注入(inject)安全漏洞,这是比 \u 序列丢失更严重的问题。

您应该使用参数化查询以避免必须考虑转义规则。例如在 PDO 中:

$url= 'http://test.com/dev-ws/events';
$json= '{"username":"Unknown","verb":"answer","object":"http://localhost/elgg/answers/view/42954/q1","context":{"course":"42902","phase":"1","widget_type":"questions","activity_id":"95c48","widget_title":"Wonder moment"},"originalrequest":{"value":{"description":"<p>\u041f\u0440\u043e\u0443\u0447\u0432\u0430\u043d\u0435</p>","question_id":42954}},"starttime":"2015-03-26 17:28:57 +0100","endtime":"2015-03-26 17:28:57 +0100"}';

$q= $db->prepare('INSERT INTO stepup (target, body) VALUES (?, ?)');
$q->bindParam(1, $url, PDO::PARAM_STR);
$q->bindParam(2, $json, PDO::PARAM_STR);
$q->execute();

关于php - 使用 PDO 通过 PHP 保存到 mysql 时字符串发生变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283995/

相关文章:

php - 使用 PHP、MySQL 和 HTML 的表单中存在错误

php - 一次处理更多插入的想法

python - Unicode解码错误: 'ascii' codec can't decode byte 0xaa in position 2370: ordinal not in range(128)

java - 可以从无效代码点构造 java String 吗?

unicode - 我如何使用 io.open 在 lua 中打开 unicode 路径

php - 发生数据库错误错误号-1054

php - 忽略 Assets lessphpfilter中的.css文件

php - Azure Web应用程序服务器响应时间慢

c# - mysql连接c#中出现异常

php - 如何存储单击的表格单元格的变量并将其传输到另一个表格?