我正在尝试使用PDO插入我的数据库,但我的代码有问题:
(!)致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与MySQL服务器版本对应的手册,以便在第16行的C:\ wamp64 \ www \ Pd \ sql.php第1行'
'user`, `pass`) VALUES (?,?)
'附近使用正确的语法(!)PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与MySQL服务器版本对应的手册,以便在第16行的C:\ wamp64 \ 00 \ 00 \ sql.php第1行的“
'user`, `pass`) VALUES (?,?)
”附近使用正确的语法
我的代码:
<?php
$dbname ="snabel_db";
$dbhost ="localhost";
$dbuser ="root";
$dbpass ="";
$db = new PDO('mysql:dbname='.$dbname.';host='.$dbhost.';charset=utf8', ''.$dbuser.'', ''.$dbpass.'') or die();
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_POST['add'])){
$user2 = $_POST['user'];
$pass2 = $_POST['pass'];
$sql ="INSERT INTO `user`('user`, `pass`) VALUES (:user1,:pass1)";
$sqlreuslt = $db->prepare($sql);
$pdoexec = $sqlreuslt->execute(array(":user1"=>$user2,":pass1"=>$pass2));
if($pdoexec){
echo 'DOne';
}else{
echo 'error';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Sql Test</title>
</head>
<body>
<form method="post" action="sql.php">
<label>Username</label><input type="text" name="user"><br>
<label>Password</label><input type="password" name="pass">
<input type="submit" name="add">
</form>
</body>
</html>
答案 0 :(得分:1)
PDO构造函数看起来是不正确的 - 对于用户和密码,当用户和密码被指定为变量时,它们是单引号的奇怪用法。
您可能还希望扩展isset
条件以包含您希望存在的其他POST变量,并且还测试成功准备的语句?
现在常见的想法是密码应该存储为哈希而不是纯文本 - 为此password_hash
和password_verify
应该有兴趣。
<?php
/* sql.php */
$dbname ="snabel_db";
$dbhost ="localhost";
$dbuser ="root";
$dbpass ="";
$db = new PDO('mysql:dbname='.$dbname.';host='.$dbhost.';charset=utf8', $dbuser, $dbpass ) or die();
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if( isset( $_POST['add'],$_POST['user'],$_POST['pass'] ) ){
$user2 = $_POST['user'];
$pass2 = $_POST['pass'];
$sql ="insert into `user` ( `user`, `pass` ) values ( :user1, :pass1 )";
$stmt = $db->prepare( $sql );
if( $stmt ){
$pdoexec = $stmt->execute( array( ":user1" => $user2, ":pass1" =>$pass2 ) );
if( $pdoexec ){
echo 'Done';
}else{
echo 'error';
}
} else {
echo "statement error";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Sql Test</title>
</head>
<body>
<form method="post" action="sql.php">
<label>Username</label><input type="text" name="user"><br>
<label>Password</label><input type="password" name="pass">
<input type="submit" name="add">
</form>
</body>
</html>
答案 1 :(得分:1)
错误引用
"INSERT INTO `user`('user`, `pass`)
你需要
"INSERT INTO `user`(`user`, `pass`)