PHP和MySQL不插入
问题描述:
<html>
<head>
<title> Register </title>
</head>
<body>
Thanks for showing interest, please register below.
<br>
<br/>
<form action="register.php" method="POST">
Username: <input type="text" name="username">
<br>
</br>
Password: <input type="password" name="password">
<br>
</br>
Age: <input type="text" name="age">
<br>
</br>
Car: <input type="text" name="car">
<br>
<input type="submit" value="register"/>
<input type="reset" value="Reset fields"/>
</form>
<?php
//db connect
$host="localhost";
$dbuser="site1login";
$dbpass="site1login";
$dbname="login";
$tblname="userdata";
//form post
$Username=$_POST['username'];
$Password=$_POST['password'];
$Age=$_POST['age'];
$Car=$_POST['car'];
$con = mysql_connect("$host","$dbuser","$dbpass") or die (mysql_error());
mysql_select_db($dbname, $con);
$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) VALUES ($Username, $Password, $Age, $Car)" or die(mysql_error()));
echo "Success!";
?>
</body>
</html>
所以,这是我的代码 - 我很困惑 - 这是行不通的 - 它说:“成功”,但不插入任何êPHP和MySQL不插入
答
更改以下部分 -
$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) VALUES
($Username, $Password, $Age, $Car)" or die(mysql_error()));
echo "Success!";
纳入此 -
$result = mysql_query("INSERT INTO userdata (Username,Password,Age,Car) VALUES
('$Username', '$Password', '$Age', '$Car')");
if($result)
{
echo "Success!";
}
else
{
die(mysql_error()); // Thanks to Pekka for pointing this out.
}
如果上述不起作用,请尝试检查您的连接参数是否正确以及MySQL是否正在运行。
你也应该测试$resut
值来检查任何成功的查询执行是否已发生 -
if($result)
{
// Successful query execution
}
else
{
// Some error occured while executing query.
// Show some useful information using echo/print.
// Then stop execution after taking other necessary steps
}
编辑
如佩卡已经提到的,你的数据库很容易受到SQL Injection攻击,因为你是不要消毒你的输入。您应该至少使用mysql_real_escape_string方法来确保不会发生这种情况。
答
你需要你的周围有变数'',所以SQL将是正确的。
答
我想,那Username
,Password
和Car
都是字符串,所以应该是:
$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car) VALUES ('$Username', '$Password', $Age, '$Car')") or die(mysql_error();
好建议 - 尝试使用PDO)
答
正如其他人在我之前指出的,你缺少围绕字段值的引号。此外,该建设严重缺陷:
$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car)
VALUES ($Username, $Password, $Age, $Car)" or die(mysql_error()));
的or die
是查询参数中。不知道如何可以工作。
取出or die
部分,做错误处理,像这样:
$result = mysql_query("INSERT INTO `userdata` (Username,Password,Age,Car)
VALUES ('$Username', '$Password', '$Age', '$Car')");
if (!$result)
die("SQL Error: ".mysql_error());
echo "Success";
而且
您的脚本很容易受到SQL injection
您的脚本就一定会执行,无论表单是否提交 - 您想要更改该表单以防止获得空记录
答
在你VALUES
声明中,你需要用的用户名$的单引号。
3210
另外,我想从你的电话中删除or die
声明。然后,我将在if
声明中测试$result
。
if ($result)
您的代码很容易受到SQL注入 – 2011-02-14 18:58:34
虽然单身的回答是正确的,我建议你回声出在以后的INSERT语句。语句格式错误会马上显而易见。 – clifgriffin 2011-02-14 18:59:43
您还需要检查提交,它会在您首次访问表单时尝试提交。 – mikelbring 2011-02-14 19:00:21