【问题标题】:insert Data Into MySQL Database Using Php PDO Probloem使用 Php PDO Probloem 将数据插入 MySQL 数据库
【发布时间】:2018-08-01 07:10:17
【问题描述】:

我正在尝试使用 PDO 插入我的数据库,但我的代码有问题:

( ! ) 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 16 行的 C:\wamp64\www\Pd\sql.php 中的 ''user`, `pass`) VALUES (?,?)' at line 1' 附近使用正确的语法

( ! ) 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>

【问题讨论】:

  • 首先我建议您将连接更改为$db = new PDO('mysql:dbname='.$dbname.';host='.$dbhost.';charset=utf8', $dbuser, $dbpass ) or die();

标签: php mysql pdo insert


【解决方案1】:

此处引用错误

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

你需要

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

【讨论】:

    【解决方案2】:

    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>
    

    【讨论】:

    • ( ! ) 致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY000]:一般错误:1366 不正确的整数值:C 中第 1 行的列 'user' 的 't7-' :\wamp64\www\Pd\sql.php 第 22 行 (!) PDOException: SQLSTATE[HY000]: 一般错误: 1366 不正确的整数值: C:\wamp64\ 中第 1 行的列 'user' 的 't7-' www\Pd\sql.php 第 22 行
    猜你喜欢
    • 2014-04-17
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    相关资源
    最近更新 更多