所以,我正在创建一个密码更改表
当有1个更改通过时,我在PassChange表中插入了他的用户名,newpass和确认码,(之后我发送了一封确认电子邮件)这个想法很简单,这里是我使用的代码
$insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('$UserName', '$newPass', '$code')") or die (mysql_error());
虽然我收到此错误: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在第1行“用户名”,“4da59df8d4007807e7230e0881fbf774”,“16585482”)附近使用正确的语法
注意:表中的所有列格式都设置为varchar。
与mysql数据库的连接很好,表名是current。
这个问题让我发疯,我只是想不通问题在哪里,如果有人在这里可以帮助我会非常感激:)
并提前致谢。
编辑: 我实际上已经解决了,只是对于通过搜索解决方案访问此帖子的人,如果你的sql命令遇到类似问题,请尝试回显它,看看字符串是如何移动到数据库的:-),happy coding每个人。
抱歉,如果我浪费你的任何时间:)我只是非常新的php& mysql:D
答案 0 :(得分:1)
删除变量周围的单引号。 PHP将它们解释为字符串。
$insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('" . $UserName. "', '" . $newPass. "', '" . $code . "')") or die (mysql_error());
此外,您可能希望执行以下操作:
$sql = "INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('" . $UserName. "', '" . $newPass. "', '" . $code . "')";
echo $sql;
接受回音,并尝试手动运行它。
答案 1 :(得分:1)
看起来您的实际用户名中有单引号 - 实际上是在传递'username'
而不仅仅是username
。尝试删除它们,看看它是否会在那之后起作用。
处理此问题(并防止SQL注入)的推荐方法是使用prepared statements,但是如果您真的想这样做,则可以使用mysql_real_escape_string($UserName)
内联执行此操作({{3} })
答案 2 :(得分:1)
看起来像sql inyection。我很确定你的$ username是$ username =“username'”。看看单引号。所以查询变为:
$ insertResult = mysql_query(“INSERT INTO TempChangePass(UserName,NewPass,ConfirmationCode)VALUES('username * '' *,'4da59df8d4007807e7230e0881fbf774','16585482')”)或死(mysql_error( ));
答案 3 :(得分:1)
您是否尝试逐列进行查询?
我的意思是:INSERT INTO TempChangePass (UserName) values ( '$UserName' );
然后加起来?
在我出错时主要适用于我;)
只是一个想法。
答案 4 :(得分:1)
在进行查询之前尝试使用清理脚本。
使用
mysql_real_escape_string()
修改强>
您现在应该使用MySQLi
版本
mysqli_real_escape_string()
或OOP方法
mysqli::real_escape_string()
答案 5 :(得分:1)
试试这个:
$insertResult=mysql_query("INSERT INTO TempChangePass(UserName, NewPass, ConfirmationCode) VALUES('$UserName', '$newPass', '$code')") or die (mysql_error());
SQL中有一些额外的空格。