首页 > 解决方案 > 无法通过php将值插入mysql

问题描述

我是 PHP/SQL 的新手并尝试了一个教程。我创建了一个具有读写权限的用户的数据库。还有一个名为“employees”的表,其中包含以下列:用户名、密码、电子邮件、令牌

这是我的代码:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Account erstellen</title>
  </head>
  <body>
    <?php
    if(isset($_POST["submit"])){
      require("mysql.php");
      $stmt = $mysql->prepare("SELECT * FROM employees WHERE USERNAME = :user"); //Username überprüfen
      $stmt->bindParam(":user", $_POST["username"]);
      $stmt->execute();
      $count = $stmt->rowCount();
      if($count == 0){
        //Username ist frei
        $stmt = $mysql->prepare("SELECT * FROM employees WHERE EMAIL = :email"); //Username überprüfen
        $stmt->bindParam(":email", $_POST["email"]);
        $stmt->execute();
        $count = $stmt->rowCount();
        if($count == 0){
          if($_POST["pw"] == $_POST["pw2"]){
            //User anlegen
            $stmt = $mysql->prepare("INSERT INTO employees (USERNAME, PASSWORD, EMAIL, TOKEN) VALUES (:user, :pw, :email, null)");
            $stmt->bindParam(":user", $_POST["username"]);
            $hash = password_hash($_POST["pw"], PASSWORD_BCRYPT);
            $stmt->bindParam(":pw", $hash);
            $stmt->bindParam(":email", $_POST["email"]);
            $stmt->execute();
            echo "Account created successfully";
          } else {
            echo "Passwords doesn't match";
          }
        } else {
          echo "E-Mail is already used";
        }
      } else {
        echo "Username not available";
      }
    }
     ?>
    <h1>Account erstellen</h1>
    <form action="register.php" method="post">
      <input type="text" name="username" placeholder="Username" required><br>
      <input type="text" name="email" placeholder="Email" required><br>
      <input type="password" name="pw" placeholder="Passwort" required><br>
      <input type="password" name="pw2" placeholder="Passwort wiederholen" required><br>
      <button type="submit" name="submit">Erstellen</button>
    </form>
    <br>
    <a href="index.php">Do you have already a account?</a>
  </body>
</html>

在我的表单中输入用户名、邮件和 2x 密码并单击“创建”后,我收到消息“帐户创建成功”,但这些值不在我的数据库中。

我尝试用 F12(Firefox) 调试它,参数被传递.......

标签: phpmysqlsql

解决方案


https://www.php.net/manual/en/pdostatement.rowcount

在某些情况下,RowCount 不会返回选择查询的计数。您可以使用if ($stmt->fetchColumn() !== false).

此外,$stmt->execute 没有错误处理(除非您打开了异常:)$mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);,因此即使该语句失败,它也会显示“帐户创建成功”。试试if ($stmt->execute()) { good } else { bad }这也是个不错的地方->rowCount()


推荐阅读