Php 向MySQL数据库添加新用户记录时出现问题

Php 向MySQL数据库添加新用户记录时出现问题,php,mysql,sql,Php,Mysql,Sql,可能重复: 简而言之,我正在编写一个登录表单,将数据存储到数据库中。我的html和脚本应该工作得很好,此时此刻不需要太多考虑安全性。但是我的问题是我的php脚本不会更新我的sql数据库。一切都检查得很好,所有post变量都被带过,只是不会插入它们。我开始认为用户(是的,我正在使用root)由于某种原因没有足够的特权,所以我想知道如果你愿意的话,如何设置一个新的“管理员用户”。我在我的Windows7机器上运行WAMP,如果这有很大的不同的话 我的表格: <html xmlns="http

可能重复:

简而言之,我正在编写一个登录表单,将数据存储到数据库中。我的html和脚本应该工作得很好,此时此刻不需要太多考虑安全性。但是我的问题是我的php脚本不会更新我的sql数据库。一切都检查得很好,所有post变量都被带过,只是不会插入它们。我开始认为用户(是的,我正在使用root)由于某种原因没有足够的特权,所以我想知道如果你愿意的话,如何设置一个新的“管理员用户”。我在我的Windows7机器上运行WAMP,如果这有很大的不同的话

我的表格:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Registration</title>
</head>

<body>

<form action="register.php" method="post" />
<p>Username:</p><input type="text" name="username" />
<p>Password:</p><input type="text" name="password" />
<p>Name:</p><p>First:<input type="text" name="fname" />Last:<input type="text" name="lname" /></p>
<p>Email:</p><input type="text" name="email" />
<input type="submit" />

</body>
</html>

然后,我可以从comand行添加一个用户更新,但php是一个禁忌,再次使用带有密码的root帐户。脚本不会连接到服务器,因为它会成功地检查用户是否已准备就绪。如果需要更多信息,请询问。

我看不到您在数据库中插入了什么内容,要运行insert,您需要使用与select语句中使用的相同的
mysql\u query
函数,而且,insert的语法不正确,请先检查以了解它是如何运行的。

1),不要使用旧的
mysql.*
函数,它们是不安全的,并且会贬值(请参见红色框)。相反,看看使用PDO或MySQLi,它们不会花很长时间学习,而且,依我看,它们在各个方面都要好得多,包括一旦你习惯了它们的易用性

2) 其次,
SET
主要用于
UPDATE
命令,不常用于
INSERT
INSERT
命令通常应该是这样的:

INSERT INTO `tbl` (`column1`,`column2`) VALUES ('value1','value2');
见MySQL

3) 第三,我不确定代码是否复制错误,但看起来您没有将以下插入字符串分配给变量,也没有执行它

'INSERT INTO members SET
username="' . $myusername . '",
password="' . $mypassword . '",
fname="' . $myfname . '",
lname="' . $mylname . '"
email="' . $myemail . '"';
(关于语法,再次参见第2点)


4) 第四,缩进!!使阅读和调试更加容易。正确缩进的代码可以通过读取代码来显示错误,甚至在开始正确的“调试”过程之前都可以显示错误,这可以节省您很多时间!:)

仅供参考:stripslashes不能防止sql注入。如果有什么区别的话,它可以通过删除(一些)先前的转义运行添加的转义,使注入攻击变得更糟。您是否检查过您的查询是否使用
$result=mysql\u查询(…)或die(mysql\u error())
类型构造?永远不要假设查询成功了。有什么原因可以解释为什么你要用手工而不是使用像or这样的PHP框架来完成这项工作?这些不仅有助于构建您的应用程序,避免像这样的简单问题,而且它们也将帮助您解决您在这里使用的
mysql\u real\u escape\u string
,这充其量只是一个绷带。至少,使用
mysqli
可以通过使用
bind_-param
极大地简化转义过程。因此它应该是这样的:“$插入成员(用户名、密码、fname、lname、电子邮件)值(“$发布[用户名]”、“$发布[密码]”、“$发布[fname]、“$发布[lname]、“$发布[电子邮件]”)”;否。它应该类似于
在成员(用户名、密码、fname、lastname、电子邮件)中插入值(:username、:password、:fname、:lname、:email)
,然后进行绑定调用以将值与这些占位符相关联。你在那里做的事情非常危险。$return=“插入到成员中('username'、'password'、'fname'、'lname'、'email')值('$myusername'、'$mypasword'、'$myfname'、'$myemail')”;如果(!mysql_query($return,$con)){die('Error:'.mysql_Error());}对不起,我不知道如何在注释中使用代码标记,但我相信这就是您所指的是吗?它给了我一个未定义变量的错误:mypasword“非常感谢,这实际上修复了它”
INSERT-INTO…SET
是一个有效的MySQL插入数据的方法,但几乎没有人使用它。@tadman是这样的,我的错!:)编辑过的答案,thnx
INSERT INTO `tbl` (`column1`,`column2`) VALUES ('value1','value2');
'INSERT INTO members SET
username="' . $myusername . '",
password="' . $mypassword . '",
fname="' . $myfname . '",
lname="' . $mylname . '"
email="' . $myemail . '"';