转义并将序列化数据插入MySQL

IMB*_*IMB 1 php mysql

我有以下数据作为示例:

$a = addslashes('hello\'s');
$b = serialize($a);

// As you know, $b looks like this s:8:"hello\'s";
Run Code Online (Sandbox Code Playgroud)

现在,当我向MySQL插入$ b时,数据现在看起来像这样:8:MySQL中的"hello".MySQL删除\,现在我有一个无效的序列化数据.

解决这个问题的最佳方法是什么?谢谢

Joh*_*ica 6

要转义参数以进入SQL查询,您不使用addslashes,但是mysql_real_escape_string.

例:

<?php
  $param = mysql_real_escape_string($_GET['param']);
  $query = "SELECT f1, f2 FROM atable WHERE f3 = '$param' ";
  // these single quotes here are essential !!   ^      ^ 
  // if you leave out the quotes you **will** suffer SQL-injection.
Run Code Online (Sandbox Code Playgroud)

这是转义SQL参数的正确方法.
或者甚至更好地使用PDO准备好的语句,然后你根本不必逃避.