我已经试过很多次了,我不明白为什么这不起作用。因此,我的注册页面传递所有用户名。我不知道怎么了。对不起,我的英语不好,我真的很累,绝望
function user_exists($username){
$username = htmlspecialchars($username);
$sql = "SELECT username FROM ***** WHERE username = '$username'";
$result = mysqli_query($GLOBALS['$db'], $sql);
if(mysqli_num_rows($result) > 0){
$errors[] = 'Käyttäjätunnus '''. $_POST['username'] . ''' on jo otettu.';
}
}
我像这样调用这个函数:
if(user_exists($_POST['username']) === true){
$errors[] = 'Käyttäjätunnus '''. $_POST['username'] . ''' on jo otettu.';
}
我们来整理一下
function user_exists(mysqli $db, $username){
$username = htmlspecialchars($username);
$sql = "SELECT username FROM ***** WHERE username = ?";
$prep = $db->prepare($sql);
$prep->bind_param('s', $username);
$prep->execute();
$result = $prep->get_results();
$errors = [];
if($result->num_rows > 0){
$errors[] = 'Käyttäjätunnus '''. $username . ''' on jo otettu.';
}
return $errors;
}
首先,需要将DB连接注入到函数中。避免使用全局变量。
第二,我们切换到预处理语句。解决SQL注入问题。
第三,返回一个数组。你的错误永远不会以你做事的方式出现。你可以选择如何返回/返回什么,但是,同样,我们不想要全局变量。