PHP转义编码的引号

时间:2010-10-10 17:00:06

标签: php mysql pdo escaping

我有以下代码将一些数据发布到数据库中:

$post = trim( $post );
$post = htmlentities( $post, ENT_QUOTES, null, false );

$statement = "INSERT INTO table (row) VALUES (:message)";
$prepared_posts = $pdo->prepare( $statement );
$prepared_posts->execute( array( ':message' => $post ) );

我在localhost和staging / production服务器上都有MySQL版本5.1.47-community,但我在这两个版本上都得到了不同的输出。在localhost上我正在运行PHP 5.3.2,生产服务器有PHP 5.2.14

如果我正在尝试发布句子that's "ok",则在生产时会保存that\'s \"ok\",localhost会生成正确的that's "ok"

可能导致这种情况的原因是什么?可能是一些MySQL设置?我也尝试使用mysqli而不是PDO来做同样的事情。

2 个答案:

答案 0 :(得分:1)

这些额外的反斜杠可能是Magic Quotes,因此that's "ok"变为that\'s \"ok\"。尝试disable them

答案 1 :(得分:0)

我认为magic_quotes_gpc在生产服务器中是on,在localhost中是off

您可以使用ini_set命令设置它。