Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 使用insert命令时出现mysql错误_Php_Mysql_Database_Insert - Fatal编程技术网

Php 使用insert命令时出现mysql错误

Php 使用insert命令时出现mysql错误,php,mysql,database,insert,Php,Mysql,Database,Insert,因此,我正在创建一个密码更改表 当有人更改通行证时,我会在通行证更改表中插入他的用户名、新通行证和确认代码(因此我会在之后向他发送一封确认电子邮件)。想法很简单,下面是我使用的代码 $insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('$UserName', '$newPass', '$code')") or die (mysql_error())

因此,我正在创建一个密码更改表

当有人更改通行证时,我会在通行证更改表中插入他的用户名、新通行证和确认代码(因此我会在之后向他发送一封确认电子邮件)。想法很简单,下面是我使用的代码

 $insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('$UserName', '$newPass', '$code')") or die (mysql_error());
虽然我得到了这个错误: 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行的“用户名”、“4DA59DF8D4007807E7230E0881BF774”、“16585482”)附近使用的正确语法

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

与mysql数据库的连接良好,表名为currect

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

先谢谢你

编辑: 事实上,我已经解决了这个问题,对于那些通过搜索解决方案来访问本文的人来说,如果您的sql命令有类似的问题,请尝试回显它,看看字符串是如何准确地移动到数据库的:-),很高兴为每个人编写代码


如果我浪费了你的时间,我很抱歉:)我对php&mysql非常陌生:D

删除变量周围的单引号。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;

获取该回显,并尝试手动运行它

看起来您的实际用户名中有单引号——实际上您传递的是
'username'
,而不是
username
。试着把它们去掉,看看在那之后是否还能用


处理此问题(并防止SQL注入)的推荐方法是使用,但是如果您确实想这样做,您可能可以使用
mysql\u real\u escape\u string($UserName)
()

内联使用类似于SQL inyection的字符串。我很确定您的$username是$username=“username'”。请看一条引文。因此,问题变成:


$insertResult=mysql_查询(“插入TempChangePass(用户名、新密码、确认码)值('UserName*''*,'4da59df8d4007807e7230e081fbf774','16585482'))或die(mysql_error())

您是否尝试逐列进行查询

我的意思是:

INSERT INTO TempChangePass (UserName) values ( '$UserName' ); 
那么把它加起来

当我出错时,大多数情况下对我有效;)


只是个主意

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

使用

编辑

您现在应该使用
MySQLi
版本

mysqli_real_escape_string()
或OOP方法

mysqli::real_escape_string()
试试这个:

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

SQL中有一些额外的空格

您的用户名变量中是否有
<代码>打印($UserName)。然后,参加go meet,阅读并尝试(暂时)更改代码,以便首先组装查询,然后转储整个查询,以便查看发生了什么。i、 e.
$q=“插入TempChangePass(用户名、新密码、确认码)值(“$UserName”、“$NewPass”、“$code”)”
然后
var\u dump($q)
这样您就可以看到您正在生成的确切查询。这应该可以让您看到问题所在。哦,所以在处理varchar时,不需要加引号?您仍然希望在它们周围加上单引号,但请确保传递的是变量,而不是实际的单词:“$username”。如果您查看我提供的代码行,您会发现我仍然在每个变量前后使用单引号。或者,您可以使用大括号
{$Username}
包装变量,以便更好地将变量与文本的其余部分区分开来。有时候,这样读会容易一些。啊哈,我使用了你的代码,我得到了完全相同的错误:(也使用了花括号和同样的东西)我看到了那个额外的引号,我想:嗯,这个引号不应该在这里,但我的用户名是这样的:$username='username';
$insertResult=mysql_query("INSERT INTO TempChangePass(UserName, NewPass, ConfirmationCode) VALUES('$UserName', '$newPass', '$code')") or die (mysql_error());