Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL语法错误。解决不了_Php_Mysql_Mysqli_Registration - Fatal编程技术网

Php MySQL语法错误。解决不了

Php MySQL语法错误。解决不了,php,mysql,mysqli,registration,Php,Mysql,Mysqli,Registration,我想在一些db表的字段中插入0,但无法使其工作。我的注册php脚本中的代码如下所示 组是一个关键字,它需要用引号括起来。而且,看起来你并没有在进行任何消毒,如果没有,你应该这样做。团队是一个团队。重命名您的字段或将其放在$age之后的“您错过的”引号内。 你也应该用{$data['lname']}代替引号中的$data[lname] 转义你的值:mysql\u real\u escape\u string 正确地将php变量添加到字符串中:sprintf或for数组表示法使用大括号{$data

我想在一些db表的字段中插入0,但无法使其工作。我的注册php脚本中的代码如下所示


组是一个关键字,它需要用引号括起来。而且,看起来你并没有在进行任何消毒,如果没有,你应该这样做。

团队是一个团队。重命名您的字段或将其放在$age之后的“

您错过的”引号内。 你也应该用{$data['lname']}代替引号中的$data[lname]

转义你的值:mysql\u real\u escape\u string 正确地将php变量添加到字符串中:sprintf或for数组表示法使用大括号{$data['var']} 在组或每个字段名称周围打勾以确定 不要将NULL或NOW括在记号、引号等中。。你在这件事上其实没问题,只是想确保你保留了它
根据您的编辑,您错误地引用了单词组。不能使用单引号将保留字转换为可接受字,必须使用反勾号:

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

单引号可以将任何内容转换为字符串,但不能将字符串用作字段名


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

PDO,请。您的代码易于SQL注入。该组可能是保留字吗?尝试从insert中删除该列以及相应的值,看看这是否有助于克服语法错误。然后您可能需要重命名该列。@mc10不要担心,我正在清理代码函数filter$data{$data=trimHTMLentiestrip\u tags$data;if get\u magic\u quotes\u gpc$data=stripslashes$data;$data=mysql\u real\u escape\u string$data;return$data;}@Still,使用PDO和预处理语句总是一个好主意。您需要发布代码生成的实际SQL语句。代码本身看起来还可以,但是因为它是MySQL的抱怨,所以您需要准确地向我们展示发送到MySQL的内容。e、 g.向我们显示echo$sql。您确定组字段使用{$data['lname']}而不是'you should use'。但字段名不能使用字符串。为什么?SQL Server对insert into“sometable”和insert into sometable的查看方式完全不同,insert into somefield也是如此。。。v、 s.在sometable中插入somefield。一个是字符串,一个是表/字段名。即使这两者在外观上完全相同,但在服务器内部它们是完全不同的。
$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')";
<?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));
INSERT ....., `group`, ... VALUES ....
              ^-----^--- note the backticks