mysqli_num_rows没有返回预期的内容

时间:2016-03-14 03:08:08

标签: php function mysqli return

我有一个用户注册页面。除了检查其他用户是否已在使用用户名时,一切都在页面上工作。我的PHP(“......”意味着其他代码之间没有相关性):

$login = mysqli_connect("localhost","***","***","***"); // hidden for obvious reasons

function usernameTaken($name)
{
    $query = "SELECT * FROM useraccs WHERE username='$name' LIMIT 1";

    return mysqli_num_rows(mysqli_query($login,$query)) > 0;
}

...

$username = mysqli_real_escape_string($login,$_POST["username"]);

....

if (usernameTaken($username))
    $error.= "Username is already in use.<br />";

这不起作用,即使我在查询中输入了一个字符串文字,我知道它在我的SQL表中。在我的HTML中,我有这个:

<?php 
$query = "SELECT * FROM useraccs WHERE username='$username' LIMIT 1";

if (mysqli_num_rows(mysqli_query($login,$query)) > 0)
    $error.= "Username is already in use.<br />";

echo $error;
?>

当我使用我知道的用户名提交注册表单在我的SQL表中时,此代码实际上有效(mysqli_num_rows按预期返回1)并且错误得到回应)。即使代码在两种情况下应该完全相同,但它只是在函数中不起作用。无论我把它放进去,函数总是返回false。

我使用功能的唯一原因是美观。我知道我可以使用第二个例子,它可以工作,但我不能为我的生活弄清楚为什么功能不起作用。我正在使用完全相同样式的多个其他函数(但不是mysqli_num_rows)用于本页面的其他部分,它们工作正常。

我甚至尝试在函数中从查询中返回一个数组,但什么都没有回来。我必须遗漏一些关于PHP函数的基本知识......

1 个答案:

答案 0 :(得分:2)

变量超出了函数的范围。你可以这样做:

1 - 使用全局

$login = mysqli_connect("localhost","***","***","***"); // hidden for obvious reasons

function usernameTaken($name)
{
    global $login;
    $query = "SELECT * FROM useraccs WHERE username='$name' LIMIT 1";

    return mysqli_num_rows(mysqli_query($login,$query)) > 0;
}

2 - 将其放入函数参数

$login = mysqli_connect("localhost","***","***","***"); // hidden for obvious reasons

function usernameTaken($name, $login)
{
    $query = "SELECT * FROM useraccs WHERE username='$name' LIMIT 1";

    return mysqli_num_rows(mysqli_query($login,$query)) > 0;
}