为什么我的sql语句不将数据插入数据库?

时间:2019-05-09 13:41:20

标签: php mysql database pdo

最近,我使用php和mysql-database构建了一个登录系统。我手动输入了所有用户,因此下一步要做的是建立寄存器功能。但是由于某种原因,数据无法进入我的数据库。

这是我的注册页面:

<div class="login">
    <div class="background">
        <img src="../pic/skyscrapers.jpg"></img>
        <div class="logbox">
            <form class="form-register" action="../func/func_register3.php" method="POST">
                <h1>Registrierung</h1>
                <div class="user">
                    Choose your username:<br>
                    <label for="frm_user">username</label>
                    <input type="text" name="frm_user" id="frm_user" placeholder="Benutzername" required autofocus>
                    <br>
                    <br>
                    Choose your password:<br>
                    <label for="frm_pass">Password</label>
                    <input type="password" name="frm_pass" id="frm_pass" placeholder="Password" required>
                    <br>
                    <br>
                    Repeat your password:<br>
                    <label for="frm_pass_rep">Repetition</label>
                    <input type="password" name="frm_pass_rep" placeholder="Password"><br>
                    <br>
                    <br>
                </div>
                <button name="btn_register" id="btn_register" type="submit">register</button>
            </form>
        </div>
    </div>
</div>

这是带有register-logic的php文件:

<?php

if (isset($_POST['btn_register'])) {
        include("../inc/db_connect.php");

        //Form fields -> php-variables
        $frm_user = $_POST['frm_user'];
        $frm_pass = $_POST['frm_pass'];
        $frm_pass_rep = $_POST['frm_pass_rep'];

        $stmt = $dbh->prepare("INSERT INTO tbl_users (username, password) VALUES (:frm_user, :frm_pass)");
        $stmt->bindParam(':frm_user', $frm_user);
        $stmt->bindParam(':frm_pass', $frm_pass);

    if ($stmt->execute() == true):
        echo "All good!";
        else:
        {
            echo "The statement has not been executed!";
            echo "<br>";
            echo print_r($stmt->errorInfo, true);
            echo "<br>";
            echo $stmt->errorCode();
        }
        endif;
}

输出为“语句尚未执行!23000”,这是正确的,没有数据传递到数据库...我已经尝试使用其他类型的浏览器和其他数据库。登录可以正常工作,并且两个文件(一个带有login-logik的文件和一个带有register-logik的文件)都使用同一文件连接到数据库。对于解决此问题的各种想法,我将深表感谢。

1 个答案:

答案 0 :(得分:-1)

我想您的id列是自动递增的。您应该将其从查询中删除:

$stmt = $dbh->prepare("INSERT INTO tbl_users (username, password) VALUES (:frm_user, :frm_pass)");

,或者如果不是自动递增,或者您想给它一个值,则应该为其插入一个值:

$stmt = $dbh->prepare("INSERT INTO tbl_users (id, username, password) VALUES (:id,:frm_user, :frm_pass)");