从'@'开始的SQL语法错误

时间:2012-12-13 03:41:41

标签: php mysql sql

当我运行包含'@'的字符串时,我的mySQL查询卡住了。我试过htmlentities()和htmlspecialchars()无济于事。这就是我正在运行的:

    $name=$_POST['name'];
$first=$_POST['first'];
$last=$_POST['last'];
$bio=htmlentities($_POST['bio']);
$email=htmlentities($_POST['email']);
$pass=$_POST['pass'];
$date=date("m/d/y");
$bd=date('m-d-y',strtotime($_POST['month'].$_POST['date'].$_POST['year']));
$qer="insert into everything (user,first,last,bio,email,pass,date,bd) values ($name,$first,$last,$bio,$email,$pass,$date,$bd)";
if(!(mysql_query($qer,$con))){
    echo "no qer";
    echo mysql_error();
}

这是错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   近   '@ re5yhgr5tyhrtyhr5tyr5tyhrt,测试@ first.com,通过12/13 / 12,01-01-70)'   在第1行

我是第一次在我的电子邮件参数中尝试它,但我现在知道无论它在哪里都有麻烦。 >:|

我假设“第1行”是sql的第一行,因为我的实际第1行是“”......

很抱歉,如果这很明显,请提前感谢!

3 个答案:

答案 0 :(得分:3)

在插入数据类型为string的值时,应使用单引号附上。 (也适用于日期,时间,日期时间等,只要它不是数字

$qer="insert into everything (user, first, last, bio, email, pass, date, bd) 
      values ('$name', '$first', '$last', ...)";

但上面的查询容易被SQL Injection攻击,请阅读以下文章,了解如何阻止SQL Injection

答案 1 :(得分:2)

尝试:在varchar,char或date类型的字段中添加撇号(')。

 ...values ('$name','$first','$last','$bio','$email','$pass','$date','$bd')...

答案 2 :(得分:0)

你应该在string中包装insert sql的args,比如"test@first.com"