有人帮助我:
$query = "INSERT INTO tbl_users(user, password, password_def, userid, level
, regdate, lastdate, email) VALUES('$username', sha1('$password')
, sha1('$password'), '$userid', '0', NOW(), NOW(), '$email');";
$userid
是ramdon md5 id。
它给了我这个错误:
posttokenError: Account not created You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near '\'esck21\', sha1(\'password\'), sha1(\'password\'),
\'14bd25cbe111c2975232b33ee8c2' at line 1
我想我会心脏病发作。 感谢。
答案 0 :(得分:2)
根据错误消息判断,您可能会在整个查询上调用某种转义函数,例如addslashes($query)
或mysql_real_escape_string($query)
。这将逃避查询中的每个引用,当你真正想要做的只是逃避变量中的引号时。
如果是这种情况,那么你想要做这样的事情:
$query = "INSERT INTO tbl_users(user, password, password_def, userid, level,
regdate,lastdate, email) VALUES('".mysql_real_escape_string($username)."',
sha1('".mysql_real_escape_string($password)."'),
sha1('".mysql_real_escape_string($password)."'),
'".mysql_real_escape_string($userid)."', '0',
NOW(), NOW(), '".mysql_real_escape_string($email)."')";
这将正确地转义您的数据,而不会错误地转义查询的其余部分。完成此操作后,请不要通过其他形式的转义将$query
作为整个字符串运行。
答案 1 :(得分:1)
您需要反击(`)密码字段:
$query = "INSERT INTO `tbl_users` (`user`, `password`, `password_def`, `userid`
, `level`, `regdate`, `lastdate`, `email`)
VALUES('$username', 'sha1($password)', 'sha1($password)', '$userid'
, '0', NOW(), NOW(), '$email');";
您应该始终反击字段,表格和数据库。
还有一件事:关注SQL Injections ,请使用mysql_real_escape_string()
。
经过一番讨论,我确信你的问题在于你的引用用法,检查zombat的答案。