&;can';不能通过PHP插入MYSQL

&;can';不能通过PHP插入MYSQL,php,Php,我听上去很奇怪。我有一个简单的PHP脚本,可以将数据插入MYSQL表。 通过AJAX从客户端接收内容后,数据存储在变量中: $content=$_POST['content']; $sql="insert into contents values('$content')"; mysql_query($sql); 问题是,如果内容包含一个“&”符号,则在&之前的子字符串将存储在MYSQL中,其余字符串将被丢弃。如果我直接在MYSQL中尝试,那么它会存储包含&symbol的完整字符串。为什么 问

我听上去很奇怪。我有一个简单的PHP脚本,可以将数据插入MYSQL表。 通过AJAX从客户端接收内容后,数据存储在变量中:

$content=$_POST['content']; 
$sql="insert into contents values('$content')";
mysql_query($sql);

问题是,如果内容包含一个“&”符号,则在&之前的子字符串将存储在MYSQL中,其余字符串将被丢弃。如果我直接在MYSQL中尝试,那么它会存储包含&symbol的完整字符串。为什么

问题是mysql将“&”重新组织为AND。看看这个:

$content = mysql_real_escape_string($_POST['content']); 
$sql = "insert into contents (column) values('$content')";
mysql_query($sql);

首先,如果这个站点是实时的,请将其关闭lol。这是典型的sql注入漏洞

您现在需要使用的是
mysqli
,而不是mysql

你使用它的方式是一样的,但是它有一个非常酷的特性,叫做

它所做的是在将数据传递到数据库之前对其进行参数化

$content = $_POST['content']; 
$connection = new mysqli('ipaddress','username','password','database');
$content = $connection->real_escape_string($content);
$sql="insert into contents values('$content')";
$connection->query($sql);

这是一种更安全的数据传递方式

我认为您的问题在于sql注入漏洞。不如改用事先准备好的语句?另外-注意
mysql\uuz
已被弃用,请选择mysqli或PDO。这是非常不安全的!使用
mysqli
pdo
而不是
mysql\uu
。我也使用了$content=mysql\u real\u escape\u string($content),但这是徒劳的@BenjaminGruenbaum@rosemary这仍然是一个极其脆弱的解决方案。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO,。我在一些脚本中使用mysqli。感谢您的解决方案@BenjaminGruenbaumNo,
mysql\u query()
默认使用上次打开的连接。阅读文档:+1以解决问题,而不是使用其他库来“掩盖问题”。我也使用了$content=mysql\u real\u escape\u string($content),但它在vain@rosemary但是记住要给列命名。使用
mysqli
并不能保证它的安全。我使用的是
mysql
,并且固执地拒绝使用其他任何东西,因为我知道什么是注射,以及如何避免注射;)我没说使用mysqli会安全。我说过使用真正的转义字符串是没有理由不使用MySQLi和准备好的语句的。而且
mysql
有完全相同的特性,关于
MySQLi
没有什么“真正酷”的。天哪,一定是星期天了。所以纳粹没有什么比巨魔更能提升自我的了。。。