MySQL语法错误。无法解决它

时间:2011-08-29 20:24:10

标签: php mysql mysqli registration

我想在某些db表的字段中插入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,profession)附近使用正确的语法'VALUES'在线2“

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

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

$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')";

5 个答案:

答案 0 :(得分:4)

groupreserved word。重命名你的字段或将其放在反引号(`)

答案 1 :(得分:2)

Group是一个关键字,需要用引号括起来。此外,它看起来并不像你正在做任何消毒,如果没有,你应该。

答案 2 :(得分:2)

你想念'年龄后的报价'。 您还应该在引号中使用{$ data ['lname']}而不是$ data [lname]。

答案 3 :(得分:2)

鉴于您的修改,您错误引用了group这个词。你不能用单引号把一个保留字变成一个“可接受的”字,它必须是反引号:

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

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

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

答案 4 :(得分:0)

4件事,

  1. 转义你的值:mysql_real_escape_string
  2. 将php变量正确添加到字符串:sprintf或数组表示法使用花括号“{$ data ['var']}”
  3. 围绕group反击(或确定每个字段名称)
  4. 不要在刻度,引号等中包含NULL或NOW()。(你实际上对此很好,只是想确保你保留它)
  5. <?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));
    

    <?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));