php:mysqli_num_rows返回0

时间:2016-07-25 11:16:24

标签: php mysqli

我知道这可能是重复的:
php - MYSQLI_NUM_ROWS ALWAYS RETURNING 0
php - mysqli_num_rows() is always returning 0

事情是他们都没有给我一个问题的答案。

这是我的代码的示例代码,其语法与我使用的相同。


的index.html

<html>
    <head><title>GAS - Give Away System - Create User</title></head>
    <body>
        <script src="jquery.js"></script>
        <input type="text" placeholder="Username" id="uname" /><br><br>
        <p id="errors"></p>
        <script>
            $(document).ready(function(){
                $.ajaxSetup({cache:false});
                setInterval(function(){
                    $("#errors").load("php/errorchecking.php?c=username&v="+document.getElementById('uname').value);
                }, 500);
            });
        </script>
    </body>
</html>

的PHP / errorchecking.php

<?php
    $con = mysqli_connect('localhost', 'root', '', 'gas');
    if(isset($_GET['c']) && isset($_GET['v'])){
        echo 'Current value: ', $_GET['v'], '<br>This value is set for: ', $_GET['c'], '<br><br>';

        if($_GET['c']==="username"){
            if($_GET['v']===null){
                echo "Sorry, this username is empty! Please write a username!";
            }else{
                // I know this is open for SQL Injection, it's not in my worries.
                $query = "SELECT `username` FROM `users` WHERE `username` ='{$_GET['v']}'";
                $sql = $con->query($query);

                if(mysqli_num_rows($sql) > 0){
                    echo "Sorry, this username is already in use! Please choose something else";
                }else{
                    echo "Username avaible!"; //This is line 17
                }
            }
        }
    }else{
        echo 'This is an invalid form!';
    }
?>

现在假设我的桌面上有一个名为User15的用户名,而某人的输入与 php / errorchecking.php 中显示消息"Username available!"完全相同 17

为什么这样做?由于它已经是一个名为User15的用户,因此应显示的是"Sorry, this username is already in use! Please choose something else"

感谢您花时间帮助我! CECILIE。

2 个答案:

答案 0 :(得分:3)

这是一种错误的查询语法。您需要使用反向标记,而不是' s:

$query = "SELECT username FROM `users` WHERE 'username'='".$_GET['v']."'";
//-------------------------------------------^--------^

将其更改为:

$query = "SELECT `username` FROM `users` WHERE `username`='".$_GET['v']."'";

注意:

  • `` - 对于列。
  • '' - 适用于值。

答案 1 :(得分:2)

您必须从查询中删除列名周围的'(单引号),如下所示: -

$query = "SELECT `username` FROM `users` WHERE `username`='".$_GET['v']."'"; 

注意: - 而不是'(单引号)使用反向标记。因为单引号(')用于column-name以及table-name使用的值和反向标记。谢谢