繁体   English   中英

使用Php PDO Probloem将数据插入MySQL数据库

[英]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_hashpassword_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM