3

所以,我正在创建一个密码更改表

当一些 1 更改通过时,我在 PassChange 表中插入他的用户名、newpass 和确认代码,(所以我之后给他发送一封确认电子邮件)这个想法很简单,这是我使用的代码

 $insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('$UserName', '$newPass', '$code')") or die (mysql_error());

虽然我收到此错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'username''、'4da59df8d4007807e7230e0881fbf774'、'16585482')' 附近使用正确的语法

注意:表中的所有列格式都设置为 varchar。

mysql数据库连接正常,表名正确。

这个问题快把我逼疯了,我就是不知道问题出在哪里,如果有人能帮助我,将非常感激:)

并提前感谢。

编辑:我实际上已经解决了,仅针对通过搜索解决方案访问此帖子的人,如果您的 sql 命令遇到类似问题,请尝试回显它,并查看字符串是如何移动到数据库的 :-),祝大家编码愉快。

对不起,如果我浪费了你的任何时间 :) 我对 php 和 mysql 很陌生 :D

4

6 回答 6

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;

接受那个回声,然后尝试手动运行它。

于 2012-05-18T18:40:08.977 回答
1

看起来您的实际用户名中有单引号 - 您实际上是在传递'username'而不是username. 尝试删除这些,看看它是否会在那之后工作。

处理此问题(并防止 SQL 注入)的推荐方法是使用准备好的语句,但是如果您真的想要,您可以使用mysql_real_escape_string($UserName)( reference )内联执行此操作

于 2012-05-18T18:40:09.047 回答
1

看起来像 sql inyection。我很确定你的 $username 是 $username = "username'"。看单引号。所以查询变成了:

$insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('username* '' *, '4da59df8d4007807e7230e0881fbf774', '16585482')") 或死 (mysql_error());

于 2012-05-18T18:40:47.253 回答
1

您是否尝试过一列一栏的查询?

我的意思是 :

INSERT INTO TempChangePass (UserName) values ( '$UserName' ); 

然后加起来?

主要是在我遇到错误时为我工作;)

只是一个想法。

于 2012-05-18T18:44:31.893 回答
1

在进行查询之前尝试使用清理脚本。

采用

mysql_real_escape_string()

编辑

您现在应该使用该MySQLi版本

mysqli_real_escape_string()

或 OOP 方法

mysqli::real_escape_string()

为什么使用 MySQLi 而不是 MySQL?

于 2012-05-18T18:51:49.677 回答
1

试试这个:

$insertResult=mysql_query("INSERT INTO TempChangePass(UserName, NewPass, ConfirmationCode) VALUES('$UserName', '$newPass', '$code')") or die (mysql_error());

您的 SQL 中有一些额外的空格。

于 2012-05-18T18:56:03.147 回答