我有一个用户注册页面。除了检查其他用户是否已在使用用户名时,一切都在页面上工作。我的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函数的基本知识......
答案 0 :(得分:2)
变量超出了函数的范围。你可以这样做:
$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;
}
$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;
}