我对此代码有一些问题:
if (count($_POST)) {
$username = mysql_real_escape_string($_POST['username']);
$passwd = mysql_real_escape_string($_POST['passwd']);
mysql_query("INSERT INTO users (username, password)
VALUES ($username, $passwd)");
}
<form method="post">
<p><input type="text" name="username" /></p>
<p><input type="password" name="passwd" /></p>
<p><input type="submit" value="Register me!" /></p>
</form>
我已连接到db
用户列ID为auto_increment
我在sql语句中添加或死掉mysql_error时得到这个:你的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第2行的')'附近使用正确的语法
答案 0 :(得分:14)
您在插入的值周围缺少引号:
mysql_query("INSERT INTO users (username, password)
VALUES ('$username', '$passwd')");
答案 1 :(得分:2)
用单引号
包围mysql_query("INSERT INTO users (username, password)
VALUES ('$username', '$passwd')");
答案 2 :(得分:2)
错误消息告诉您第2行的SQL中存在语法错误。所以关于代码
VALUES ($username, $passwd)
错了。具体而言,您需要围绕参数引用字符:
VALUES ('$username', '$passwd')
答案 3 :(得分:2)
尝试在插入中的变量周围添加'标记:
mysql_query("INSERT INTO users (username, password)
VALUES ('$username', '$passwd')");
答案 4 :(得分:1)
用户名和密码的字段类型是什么? 字符串? 用“
包裹答案 5 :(得分:1)
其他人给了你正确的答案。
也许在这里,您可以添加另一个变量,以便下次可以看到问题。 并且,下次,不要忘记在MySQL的前端测试您的查询(MySQL查询浏览器,PHPMyAdmin左右......)
$sql = "INSERT INTO users (username, password)
VALUES ($username, $passwd)";
if(mysql_query($sql) === false)
{
echo 'Error with my query : '.$sql;
echo mysql_error();
}
答案 6 :(得分:1)
更安全的方法是使用准备好的声明。像这样:
$statement = $db_connection->prepare("INSERT INTO users (username, password) VALUES (?, ?)");
$statement->bind_param("s", $username);
$statement->bind_param("s", $passwd);
$statement->execute();
我使用以下网页来获取此剪辑:http://www.petefreitag.com/item/356.cfm并且它提供了有关使用bind_param方法的更多信息。 (这个例子也适用于php5)。使用预准备语句的概念不仅限于php,并且在许多语言中广泛用于性能和安全性优化。