繁体   English   中英

MySQL语法错误。 无法解决

[英]MySQL Syntax error. Can't solve it

我想在某些数据库表的字段中插入0,但无法正常工作。 我的注册php脚本中的这段代码看起来像那样。

...

if (isset($type))
{
if($type==1)
{
$region=$data['region'];
$school=$data['school'];
$class=$data['class'];
$group='NULL';
$subject='NULL';
$university='NULL';
$profession='NULL';
}
if($type==2)
{
$group=$data['group'];
$region=$data['region'];
$school=$data['school'];
$class=$data['class'];
$subject='NULL';
$university='NULL';
$profession='NULL';

}
if($type==3)
{
$group='NULL';
$region='NULL';
$school='NULL';
$class='NULL';
$subject='NULL';    
$university=$data['university'];
$profession=$data['profession'];
}
if($type==4)
{
$group='NULL';
$region='NULL';
$school='NULL';
$class='NULL';
$university='NULL';
$profession='NULL';
$subject=$data['subject'];
}
}
$sql= "INSERT INTO users
(level,fname, mname, lname, dob, age, reg_date, phone, email, login, pwd, type,   group, region, school, class, ip, subject, ban, university, profession) 
VALUES 
('1','$data[fname]', '$data[mname]', '$data[lname]', '$dob', '$age, now(), '$data[phone]', '$email', '$login', '$pwd', '$data[type]', '$data[region]', '$data[school]', '$data[class]',  '$ip', '$subject', NULL, '$university', '$profession')";

$result = $db->query($sql) or die(printf("Errorv: %s\n", $db->error));
$id = $db->insert_id();  
$md5_id = md5($id);
$db->query("update users set md5_id='$md5_id' where id='$id'");
//  echo "<h3>Thank You</h3> We received your submission.";

...

每次获取此错误消息“您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以获取正确的语法,以在'group,region,school,class,ip,subject,ban,University,专业)第2行的“ VALUES”

尝试为“ 0”,而不是NULL为0。 没有成功 请帮忙

更改了代码。 仍然没有成功

$sql= "INSERT INTO users
(level,fname, mname, lname, dob, age, reg_date, phone, email, login, pwd, type, 'group', region, school, class, ip, subject, ban, university, profession) 
VALUES 
('1','$data[fname]', '$data[mname]', '$data[lname]', '$dob', '$age', now(), '$data[phone]', '$email', '$login', '$pwd', '$data[type]', '$data[region]', '$data[school]', '$data[class]',  '$ip', '$subject', NULL, '$university', '$profession')";

group保留字 重命名您的字段或将其放入反引号(`)

组是一个关键字,需要用引号引起来。 另外,看起来并没有真正在做卫生处理,如果没有,应该这样做。

您错过了$ age后的报价。 同样,您应该在引号中使用{$ data ['lname']}而不是$ data [lname]。

根据您的修改,您已经误用了单词group 您不能使用单引号将保留字变成“可接受”字,它必须是反引号:

INSERT ....., `group`, ... VALUES ....
              ^-----^--- note the backticks

单引号会将任何内容转换为字符串,但是您不能将字符串用作字段名称。

将来,如果您遇到SQL语法错误,请向我们显示导致该错误的实际查询。 通常,构建查询的PHP是不必要的-我们想看看MySQL抱怨什么。 只有弄清实际问题是什么,我们才能告诉您如何更改代码以解决问题。

4件事

  1. 转义您的值:mysql_real_escape_string
  2. 正确地将php vars添加到字符串中:sprintf或使用大括号“ {$ data ['var']}”表示数组符号
  3. group (或要确定的每个字段名称)前后打勾
  4. 不要在刻度,引号等中包含NULL或NOW()。(您实际上对此还可以,只是想确保保留它)

 <?php $sql= sprintf("INSERT INTO `users` (`level`,`fname`, `mname`, `lname`, `dob`, `age`, `reg_date`, `phone`, `email`, `login`, `pwd`, `type`, `group`, `region`, `school`, `class`, `ip`, `subject`, `ban`, `university`, `profession`) VALUES ('1','%s','%s','%s','%s','%s',now(),'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s', NULL,'%s','%s')", mysql_real_escape_string($data['fname']), mysql_real_escape_string($data['mname']), mysql_real_escape_string($data['lname']), mysql_real_escape_string($dob), mysql_real_escape_string($age), mysql_real_escape_string($data['phone']), mysql_real_escape_string($email), mysql_real_escape_string($login), mysql_real_escape_string($pwd), mysql_real_escape_string($data['type']), mysql_real_escape_string($data['region']), mysql_real_escape_string($data['school']), mysql_real_escape_string($data['class']), mysql_real_escape_string($ip), mysql_real_escape_string($subject), mysql_real_escape_string($university), mysql_real_escape_string($profession)); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM