过去几个小时我一直在努力解决一个非常荒谬的错误。 只是我正在制作注册表格。用户需要输入电子邮件,邮件将存储在mysql表中。 (我必须警告你 - 请忽略安全问题,整个事情只是一个练习)。但是我经常从sql中得到以下错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'@ gmail.com,blqh2 @ gmail.com,1)'在第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),不确定这是否有任何问题可以处理。 如果您需要任何其他信息,请告诉我,非常感谢。
答案 0 :(得分:3)
以下内容:
"($login_id,$password,$usr_phone,$region,$prv_email,$pub_email,$reseller)"
将被解析为文字,将其呈现为您在上面看到的错误。您需要将每个变量用单引号括起来,以便将其视为字符串值。
我建议您查看PDO & Prepared Statements,因为PDO为数据库提供了一个抽象层,并且具有很高的安全性(例如通过Prepared Statements)。
此外,您正在插入字段pub_email
,但是根据帖子中的给定输出,它应该是pub_mail
。
答案 1 :(得分:1)
您必须将值括在单引号中(')更改此代码段:
$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')"
答案 2 :(得分:1)
您至少需要在字符串周围添加'
,并对所有传递的参数执行mysql-real-escape-string()
。更好的方法是使用PDO或mysqli