1

当我运行包含“@”的字符串时,我有一个 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 服务器版本相对应的手册,以在第 1 行的 '@re5yhgr5tyhrtyhr5tyr5tyhrt,test@first.com,pass,12/13/12,01-01-70)' 附近使用正确的语法

我最初只是在我的电子邮件参数中尝试它,但我现在知道无论它在哪里都有问题。>:|

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

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

4

3 回答 3

3

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

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

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

于 2012-12-13T03:44:38.740 回答
2

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

 ...values ('$name','$first','$last','$bio','$email','$pass','$date','$bd')...
于 2012-12-13T03:45:56.850 回答
0

您应该将插入 sql 的参数包装在字符串中,例如"test@first.com"

于 2012-12-13T03:45:03.420 回答