首页 > 解决方案 > 为什么我的 sql-stament 没有将数据插入到我的数据库中?

问题描述

最近我使用 php 和 mysql 数据库构建了一个登录系统。我手动输入了所有用户,所以我接下来要做的是构建一个注册功能。但是由于某种原因,数据没有出现在我的数据库中。

这是我的注册页面:

<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>

这是带有寄存器逻辑的 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 的文件,都使用相同的文件连接到数据库。我会非常感谢有关如何解决此问题的各种想法。

标签: phpmysqldatabasepdo

解决方案


我猜你的 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)");

推荐阅读