我正在学习mySQL.Here我有一个名为"practice"
的数据集,它有一个名为"users"
的表。这个表有四列。
username,password,firstname,lastname;
我有一个表单字段来获取用户输入,这些字段将被插入到我的mysql表中。但是每当我想向表中插入一个新用户时它就会出错。这可能是导致这个问题的原因吗?
错误:INSERT INTO用户(用户名,密码,名字,姓氏) VALUES(Nelson,101a6ec9f938885df0a44f20458d2eb4,Nelson,Mandela)你 您的SQL语法有错误;检查对应的手册 您的MySQL服务器版本,以便使用接近')VALUES的正确语法 (尼尔森,101a6ec9f938885df0a44f20458d2eb4,纳尔逊,曼德拉)'在第1行
<?php
if(isset($_POST['name']) &&isset($_POST['password'])){
if(!empty($_POST['name']) && !empty($_POST['password'])){
$servername = $_SERVER['SERVER_NAME'];
$username = "root";
$password = "";
$dbname = "practice";
$user=htmlentities($_POST['name']);
$firstname=htmlentities($_POST['firstname']);
$lastname=htmlentities($_POST['lastname']);
$pass=md5(htmlentities(filter_var($_POST['password'],FILTER_SANITIZE_STRING)));
echo $password;
// Create connection
$conn = new mysqli($servername, $username, $password,$dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO users (username,password,firstname,lastname)
VALUES ($user,$pass,$firstname,$lastname)";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "ERROR: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
}
?>
<form action='foreach.php' method='post'>
name :<input type='text' name='name' placeholder='name'></br>
firstname : <input type='text' name='firstname' placeholder='firstname'></br>
lastname : <input type='text' name='lastname' placeholder='lastname'></br>
password :<input type='text' name='password' placeholder='password'></br>
<input type='submit'>
</form>
答案 0 :(得分:6)
编辑:由于您删除了编辑中的尾随逗号而未将其标记为修改:
<击>
删除lastname,
&lt; =中的尾随逗号
击>
引用您的值,因为它们是字符串
VALUES ('$user','$pass','$firstname','$lastname')
补充说明:
您目前的代码向SQL injection开放。使用mysqli
with prepared statements或PDO with prepared statements。
你似乎也在使用MD5来存储密码,这是非常气馁的,它是旧的并且被认为是破碎的。
对于密码存储,请使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
阅读有关MD5的这些文章:
答案 1 :(得分:2)
插入firstname,lastname,)
末尾有一个额外的逗号。此外,您需要引用您的值String
。
$sql = "INSERT INTO users (username,password,firstname,lastname,)
VALUES ($user,$pass,$firstname,$lastname)";
应改为
$sql = "INSERT INTO users (username,password,firstname,lastname)
VALUES ('$user','$pass','$firstname','$lastname')";