MYSQLI有num_rows麻烦

时间:2013-07-05 21:22:41

标签: php mysqli

我无法返回行数。我希望我的代码检查用户名是否存在,如果存在,则返回错误。我这样做的方法是,如果num_rows返回一个大于0的数字。我还没有实现那个部分,我只是想让它立即返回行数。这是我目前的代码:

    $hostname = ''; //SET SERVER/HOSTNAME
    $dbusername = ''; //SET DATABASE USERNAME
    $dbname = ''; //SET DATABASE NAME
    $dbpassword = ''; //SET DATABASE USERNAME
    $link = mysqli_connect($hostname, $dbusername, $dbpassword, $dbname); 

    if (!$link)
    { 
        $systemerror = 'Connect Error' . mysqli_connect_errno()  . mysqli_connect_error();
        $error = "there has been an error";
}


$sql = "SELECT username FROM affiliates WHERE username = $username"; 
    $result = mysqli_query($link, $sql, MYSQLI_USE_RESULT);

    if (!result) 
    { 
        $error = "There was an error with our system. Please contact All Choice Dental or wait a few minutes. Thank you.";
        goto error;
    }
    $row_cnt = $result->num_rows;   
    echo $row_cnt;

我甚至没有为num_rows返回零,所以有些事情必须是错误的。我知道我可以连接到数据库,因为我可以使用相同的连接插入行。

2 个答案:

答案 0 :(得分:1)

$username永远不会在您的代码中定义,因此查询将以

形式出现
SELECT username FROM ... username =

同样,由于用户名很可能是一个字符串,因此你也缺少该变量的引号,所以即使设置了它,查询仍然是错误的。 e.g。

$username = 'fred';

会产生

SELECT username FROM affiliates WHERE username = fred

并且您的关联企业表中不太可能有fred字段。该字段应引用:

SELECT username FROM ... WHERE username = '$username';

你应该认真考虑使用预备语句,因为这种结构容易受到SQL injection attacks的攻击。<​​/ p>

答案 1 :(得分:-1)

你正在混合使用MySQLi OOP和Procedural - 这是一种糟糕的编码风格。

要以程序方式获取行数,请使用mysqli_num_rows($result)