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

时间:2018-02-21 16:06:13

标签: php mysql pdo insert

我正在尝试使用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>

2 个答案:

答案 0 :(得分:1)

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>

答案 1 :(得分:1)

错误引用

"INSERT INTO `user`('user`, `pass`)

你需要

"INSERT INTO `user`(`user`, `pass`)