【问题标题】:mysqli_num_rows not returning what is expectedmysqli_num_rows 没有返回预期的结果
【发布时间】:2016-06-28 23:35:05
【问题描述】:

我有一个用户注册页面。页面上一切正常,除了检查用户名何时已被其他用户使用。我的 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 函数的基本知识......

【问题讨论】:

  • $login 是全局变量吗?
  • 对,对不起,$login 是我的数据库连接凭据,位于单独的 PHP 文件中。我已经确认这不是问题,因为它可以在页面的其他地方使用。
  • 您需要将其定义为函数内部的全局变量或将其作为参数。尝试在函数的第一行添加global $login; 或将登录作为您传递的参数。
  • 变量不在函数作用域内。
  • 你知道吗,既然你这么说,我之前遇到过这个确切的问题。问题是我只写了这么长时间的 JavaScript,以至于我仍然在这个意义上考虑范围。我真的需要更多地了解 PHP 范围。非常感谢!

标签: php function mysqli return


【解决方案1】:

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

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;
}

【讨论】:

    猜你喜欢
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多