2

在过去的几个小时里,我一直在与一个非常荒谬的错误作斗争。只是我正在制作注册表单。用户需要输入电子邮件,邮件将存储在 mysql 表中。(我必须警告你 - 请忽略安全问题,整个事情只是一个练习)。但是我经常从 sql 中得到以下错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“@gmail.com,blqh2@gmail.com,1)”附近使用正确的语法

html如下:

      <form method="post" action="createnew.php">
            <label >user name</label>
            <input name="login_id"></br>
            <label>password</label>
            <input name="password" password></br>
                    ...some more stuff...
            <label>Privet e-mail</label>
            <input name="prv_email"></br>
            <label>Public e-mail</label>
            <input name="pub_email"></br>
            <label>Are you a reseller</label>
            <input type="checkbox" name="reseller"></br>
            <input type="submit">
        </form>

然后是PHP:

$login_id=$_POST['login_id'];
$password=$_POST['password'];
...some more stuff...
$pub_email=$_POST['pub_email'];
echo $prv_email;
echo $pub_email;
if (array_key_exists('reseller',$_POST)) {
    $reseller=1;
}
else {
    $reseller=0;
}
$sql="INSERT INTO users".
    "(login_id,password,usr_phone,region,prv_email,pub_email,reseller)".
    "VALUES".
"($login_id,$password,$usr_phone,$region,$prv_email,$pub_email,$reseller)"

最后是邮件字段的 MySQL 格式(实际上它们 prv_email 和 pub_email 具有相同的格式)

    Field     | Type         | Collation
    ----------|--------------|-------------------  
    pub_email | varchar(255) | utf8_general_ci

我确实尝试了很多东西,但似乎没有任何效果。它总是在@处粉碎。还有一件事——我在 localhost 上运行这个代码(使用 WAMP),不确定这是否有任何问题可以解决。如果您需要任何其他信息,请告诉我,非常感谢。

4

3 回答 3

3

以下:

"($login_id,$password,$usr_phone,$region,$prv_email,$pub_email,$reseller)"

将被解析为文字,将其呈现为您在上面看到的错误。您需要将每个变量括在单引号中,以便将其视为字符串值。

我建议你看看PDO & Prepared Statements,因为 PDO 提供了一个对数据库的抽象层,以及很好的安全性(例如通过 Prepared Statements)。

此外,您正在插入到 field pub_email,但是从帖子中给定的输出来看,它应该是pub_mail.

于 2013-04-11T15:25:46.453 回答
2

您必须将值括在单引号 (') 中更改此代码段:

$sql="INSERT INTO users".
    "(login_id,password,usr_phone,region,prv_email,pub_email,reseller)".    "VALUES".
    "($login_id,'$password','$usr_phone','$region','$prv_email','$pub_email','$reseller')"
于 2013-04-11T15:26:04.713 回答
1

您至少需要'在字符串周围添加 'smysql-real-escape-string()并对所有传递的参数执行 a 。更好的是使用带有 PDO 或 mysqli 的准备好的语句

于 2013-04-11T15:28:02.850 回答