【问题标题】:OO MYSQLI num_rows always = -1OO MYSQLI num_rows 总是 = -1
【发布时间】:2016-09-06 23:32:16
【问题描述】:

我只想检查用户名是否已经存在于我的注册页面的数据库中,为此我想我可以使用输入的用户名进行选择查询,看看我得到了多少结果。但是,num_rows 总是 = -1 我使用的测试用户名在数据库中存在两次,所以当我输入它时,它应该转到 else 并打印“此用户已存在”。我也是 mysqli 的新手,所以如果您发现任何错误,我们将不胜感激。

我的 PHP 在这里:

            <?php
            if(isset($_POST['submit'])){
                    $connection = new mysqli("localhost","username","password","DB");
                    if($connection->connect_errno){
                            echo "Failed to connecto MYSQL: (" . $connection->connect_errno . ") " . $connection-> connect_error;
                    }
                    else{
                            $username = $_POST['username'];
                            $password = $_POST['password'];
                            $password = password_hash($password, PASSWORD_DEFAULT);
                            $check_exist = $connection->prepare("SELECT username FROM users WHERE username = ?");
                            $check_exist->bind_param('s', $username);
                            $username = $connection->real_escape_string($username);
                            $check_exist->execute();
                            $check_exist->store_result();
                            $numRows = $check_exist->num_rows();
                            if($numRows = -1){
                                    echo "$numRows";
                                    $enter_user = $connection->prepare("INSERT INTO users (username, password) VALUES (?,?)");
                                    $enter_user->bind_param('ss', $username, $password);
                                    $enter_user->execute();
                                    $enter_user->store_result();
                                    $check_exist->close();
                                    $enter_user->close();
                                    $connection->close();
                            }
                            else{
                                    echo "This user already exists.";
                                    $check_exist->close();
                                    $connection->close();
                            }
                    }
            }
            ?>

抱歉格式化,我有点新...

【问题讨论】:

  • $numRows = -1
  • 您应该只在users 表中的username 列中添加一个UNIQUE 约束。在插入之前依靠SELECT 会留下一个小窗口,用于插入重复记录。这可能会导致严重的安全问题。
  • @JohnConde 所以我把它从 = 改为 == 现在它总是默认为 Else... 即使用户不存在。
  • @Doncho,是什么让你认为num_rows() 如果没有找到行应该返回-1?我对the docs 的阅读表明这应该返回 0。
  • 我想通了,现在可以了。谢谢大家的帮助。

标签: php html mysqli mysql-num-rows


【解决方案1】:

“ if($numRows = -1){ ”行表示您要编码“ if($numRows == -1){ ”,这会将 $numRows 值设置为 -1。

您可以使用“ if(!$numRows){ ”。

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多