1
我有一个用户注册页面。除了检查用户名已被其他用户使用的情况以外,所有内容都在页面上工作。我的PHP(“...”意味着存在之间是不相关的其他代码):mysqli_num_rows没有返回预期的结果
$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'一个全局变量? – Matt
对不起,$ login是我在单独的PHP文件中的数据库连接证书。我确认这不是问题,因为它在页面的其他地方工作。 –
您需要将其定义为函数内的全局变量或将其作为参数。尝试在函数的第一行添加'global $ login;'或者将登录名作为您传递的参数。 – Matt