逃避& (特殊字符)在MySql或PHP中

时间:2010-11-16 11:37:33

标签: php mysql

字符串 -

<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/ebopIWPoXI0?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ebopIWPoXI0?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>

存储在数据库中的内容 -

<object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http://www.youtube.com/v/ebopIWPoXI0?fs=1

已经使用 - mysql_real_escape_string(),这对&无效:

$_POST['desc'] = mysql_real_escape_string($_POST['desc']);
mysql_query('INSERT INTO user_showcase( title, description, user_id, date_n_time) VALUES( "'.$_POST['title'].'", "'.$_POST['desc'].'", "'.$_SESSION['uid'].'", NOW())') or die(mysql_error());
mysql_close($con);

HTML -

<textarea id="desc_in" cols="40" rows="10"></textarea>

2 个答案:

答案 0 :(得分:1)

如果您使用旧版MySQL库,

mysql_real_escape_string()正确的机制。如果你得到所有这些额外的反斜杠,可能是因为你的PHP环境很老了。运行<?php phpinfo(); ?>并找到以magic_开头的指令:

magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase

理想情况下,他们都应该被禁用。如果您将PHP作为Apache模块运行,则可以在.htaccess文件中更改它:

php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag magic_quotes_sybase Off

如果您将PHP作为CGI运行,那么您的帐户中可能会有一个自定义php.ini文件。

如前所述,&不是MySQL的特殊字符。

回答更新的问题

SQL中的标准字符串分隔符是单引号,而不是双引号:

SELECT 'I am a string';

答案 1 :(得分:-1)

您应该使用参数化查询