INSERT INTO不会工作!

时间:2009-08-03 14:02:18

标签: sql mysql

我对此代码有一些问题:

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行的')'附近使用正确的语法

7 个答案:

答案 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,并且在许多语言中广泛用于性能和安全性优化。