【问题标题】:PHP PDO Query returning bool(false) [closed]PHP PDO 查询返回 bool(false) [关闭]
【发布时间】:2013-07-12 06:22:07
【问题描述】:

我是 PDO 的新手,正在尝试注册和登录。这是返回 bool(false)
当我尝试调试它时。不知道为什么会这样。

<?php
       include_once('db.php');

    $username = $_POST['username'];
    $email = $_POST['email'];
    $password = sha1($_POST['password']);
    $confirm_password = sha1($_POST['confirm_password']);
    $ip = $_SERVER['REMOTE_ADDR'];
        $fetchUsers = $db->query("SELECT * FROM `users` WHERE `username` = '$username'");

        if(!empty($username) &&
           !empty($email) &&
           !empty($password) &&
           !empty($confirm_password) &&
           filter_var($email, FILTER_VALIDATE_EMAIL) &&
           $password == $confirm_password &&
           $fetchUsers->fetchAll() != $username) {

                $insertSQL = "INSERT INTO `users`
                             (`username`, `email`, `password`, `ip`) VALUES
                             (:username => '$username', :email => '$email', :password => '$password', :ip => '$ip')";

                    $insertUser = $db->query($insertSQL);
                        var_dump($insertUser);

                echo '<br /><br />You have successfully registered.';


           }

           else {

                echo '<br /><br />There was an error with your registration.';

          }


?>

【问题讨论】:

  • 忠告,让 PDO 对错误抛出异常; $db-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);.
  • 另外,使用bcrypt 之类的密码哈希而不是sha1()

标签: php pdo insert


【解决方案1】:

您的INSERT 查询错误。也使用prepare 准备语句。

$insertSQL = "INSERT INTO `users` (`username`, `email`, `password`, `ip`) 
VALUES (:username,:email,:password,:ip)";

$insertUser = $db->prepare($insertSQL);
$insertUser->execute(array(':username' => $username, ':email' => $email, ':password' => $password, ':ip' => $ip));

【讨论】:

  • 看起来这不是问题所在。检查以下答案。
  • @user2555621 你认为你的INSERT 声明有效吗?
  • 是的。如上所述,它看起来像是其他问题。编辑:没关系。看起来查询也有问题。我删除了用户名检查部分,它仍然没有插入数据库。我编辑了我的代码,它正在使用你输入的内容。
  • @user2555621 另一个答案解决了第一个问题,但是一旦解决了,你会发现你的INSERT ..也会失败,所以这个答案也是正确的。
  • @user2555621:真的吗?因为您编写的查询与 PDO 无关(可能让您感到困惑),但查询本身是 MySQL。
【解决方案2】:

在 If 条件下,代码 $fetchUsers-&gt;fetchAll() != $username 似乎不正确。 因为fetchAll 将返回数组,您正在将它与字符串进行比较。

所以从 if 条件中删除 $fetchUsers-&gt;fetchAll() != $username 代码。然后检查。也许它会起作用。

【讨论】:

  • 好的,我会这样做的。但是我怎样才能让它检查用户名是否已经被使用。我知道在 MySQL 中我只使用 mysql_fetch_array,然后使用 ['username'] 的数组变量。如何在 PDO 中做到这一点?
  • 您认为通过此代码可以检查什么?您可以使用num_rows,如果它返回 1 或更多,则用户被占用,如果返回 0,则用户名未被占用。
  • 那么 if($fetchUsers->fetchColumn() == 1)?类似的东西?
  • @user2555621 对,但是这将是if ($fetchUsers-&gt;fetchColumn() == 0) 如果这是 1 则用户存在。
猜你喜欢
  • 2018-12-25
  • 2017-12-07
  • 2011-12-03
  • 2021-02-15
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多