Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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:“;SQL语法中出现错误。。。“近键…”;?_Php_Mysql_Syntax Error - Fatal编程技术网

Php MySQL:“;SQL语法中出现错误。。。“近键…”;?

Php MySQL:“;SQL语法中出现错误。。。“近键…”;?,php,mysql,syntax-error,Php,Mysql,Syntax Error,我发现了一个非常酷的密码丢失的scirpt,但这一行让我有问题 $r = mysql_query('INSERT INTO `keys` (username,key, vreme) VALUES ("'.$user.'", "'.$acckey.'", "'.$keyexp.'"') or die(mysql_error()); 错误 键是一个-用反勾号将其括起来 `key` 还要删除查询中的双引号,并将查询封装在双引号而不是单引号中 在查询中使用单引号来封装值。在查询的最后一个右括号和分号

我发现了一个非常酷的密码丢失的scirpt,但这一行让我有问题

$r = mysql_query('INSERT INTO `keys` (username,key, vreme) VALUES ("'.$user.'", "'.$acckey.'", "'.$keyexp.'"') or die(mysql_error());
错误

是一个-用反勾号将其括起来

`key`

还要删除查询中的双引号,并将查询封装在双引号而不是单引号中


在查询中使用单引号来封装值。

在查询的最后一个右括号和分号之间是否缺少单引号

$r = mysql_query("INSERT INTO `keys` (username,key,vreme) VALUES ('".$user."', '".$acckey."','".$keyexp."')") or die(mysql_error());
 $r = mysql_query("INSERT INTO `keys` (username,`key`,vreme) VALUES ('$user', '$acckey','$keyexp')") or die(mysql_error());
谢谢大家(:

键是一个。如下所述:

如果标识符包含特殊字符或是保留字,则无论何时引用它,都必须对其进行引用。(例外情况:限定名称中句点后的保留字必须是标识符,因此无需对其进行引用。)

如果启用SQL模式,还允许在双引号内引用标识符:

mysql>创建表“test”(col INT);
错误1064:您的SQL语法有错误。。。
mysql>设置sql\u mode='ANSI\u QUOTES';
mysql>创建表“test”(col INT);
查询正常,0行受影响(0.00秒)

因此:

mysql\u查询(“插入到'keys'(用户名,'key',vreme)值('$user','$acckey','$keyexp'))

我会说“构建一个包含值的SQL字符串”。请参阅的尾部。(将所有这些放在一边,在CLI中尝试您的查询,因为这类问题(保留字)很容易找到。我已提取了错误消息并将其放在标题中。)@pst:您无法确定以前是如何处理
$user
和其他变量的。在每个主题中阅读可能的sql注入(特别是在最有可能没有任何问题的主题中,如本主题)会变得很烦人@zerkms这对我来说无关紧要/我不在乎:手动构建字符串->太多工作,太容易出错。简单的一致性和重复性使代码整洁。@pst:但是你知道-你在这里引用bobby表完全不相关。问题是语法错误,而不是最佳实践。他不知道基本的事情,你也不知道我已经开始谈论火箭科学了。@pst:谈论bobby tables在这里确实是无关紧要的。你不可能说查询是易受攻击的。你应该只在代码中很明显的时候才提及它。尽管如此,我现在要上床睡觉了,明天再试试。@Бааааааааааааааа107一小时前,zerkms是对的。@zerkms我认为你的答案是使用保留关键字,并在其周围加上了回号。我从未对表名使用保留关键字,所以我不知道。查询本身也很糟糕,所以我修正了这个问题,我认为单引号实际上就在下一个到最后一个括号之前,我相信这是正确的,sin这就是查询结束的地方。
 $r = mysql_query("INSERT INTO `keys` (username,`key`,vreme) VALUES ('$user', '$acckey','$keyexp')") or die(mysql_error());
[ deletia ]