我有一个ajax脚本,它会自动发送数据到php,所以我可以将它存储在mysql中。除了某些东西以外,脚本工作正常。我可以将数据插入到mysql中,但如果数据包含(和[&] [和]字符,将存储[&]之前的数据,而不是[&]之后的数据。
这里是一个例子: 我的数据是:---->'这是一只猫&一只狗'。 Mysql将存储“这是一只猫”,并忽略'&一只狗' 这是我的代码:它不与pdo或mysqli。我会尽快改变!mysql不插入[&](AND)字符
<?php
//connect to db
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
//select db
mysql_select_db("database", $con);
//get post variables from ajax
$link = $_POST['var1'];
$name = $_POST['var2'];
$size = $_POST['var2'];
$cat = $_POST['var4'];
//safe from sql injections
$link = mysql_real_escape_string($link);
$name = mysql_real_escape_string($name);
$size = mysql_real_escape_string($size);
$cat = mysql_real_escape_string($cat);
//verify url existance
if (!preg_match("(^https://example\.com(.*))", $link)) {
//not valid url
mysql_close($con);
exit();
}
//check if result already exist
$check = mysql_query("SELECT link FROM links WHERE link = '{$link}';");
if (mysql_num_rows($check) == 0) {
// insert if not exist
$sql="INSERT INTO links (link, name, size, category) VALUES ('$link','$name','$size','$cat')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
mysql_close($con);
}
?>
阅读。学习。 http://en.wikipedia.org/wiki/SQL_injection – SecurityMatt 2013-03-22 22:16:29
您是否输出了示例查询并直接在数据库上运行它,以查看结果如何比较? – 2013-03-22 22:17:42
@SecurityMatt他至少会逃避输入数据,这比在StackOverflow问题中与MySQL相关的PHP的50%相比要好。 – 2013-03-22 22:19:07