[英]insert Data Into MySQL Database Using Php PDO Probloem
我正在尝试使用PDO插入数据库,但是我的代码有问题:
(!)致命错误:消息为“ SQLSTATE [42000]”的未捕获异常“ PDOException”:语法错误或访问冲突:1064 SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以获取在C:\\ wamp64 \\ www \\ Pd \\ sql.php中“第1行”的
'user`, `pass`) VALUES (?,?)
'第1行附近使用的正确语法在第16行(!)PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法错误; 在C:\\ wamp64 \\ 00 \\ 00 \\ sql.php的第1行上
'user`, `pass`) VALUES (?,?)
检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在''user`, `pass`) VALUES (?,?)
'附近使用16行
我的代码:
<?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>
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>
这里引用错误
"INSERT INTO `user`('user`, `pass`)
你需要
"INSERT INTO `user`(`user`, `pass`)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.