所以我想计算与给定"username"匹配的条目数量,并根据其0或1返回true或false。但我不知道怎么做。我在mysqli中找不到类似的mysql_return。$username是另一个脚本文件中定义的变量。
<?php
function user_exists($username) {
$query = mysqli_query($connect, "SELECT COUNT('userid') FROM 'users' WHERE 'username' = '$username' ");
return (mysqli_result($query, 0) == 1) ? true : false ;
}
?>
这就是我将使用userexists()函数的地方。
<?php
include 'core/init.php';
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) === true || empty($password) === true) {
$errors[] = 'You need to enter a user name and password';
}
else if (user_exists($username) === false) {
$errors[] = "Username not found.";
}
}
?>
我可以包含init.php文件,但似乎没有必要。它只是一个包含并需要一堆其他文件的文件。包括具有user_exists()函数的一个。这是我的连接脚本,也包含在init.php 中
<?php
$connect_error = "Connection Problem";
$connect = mysqli_connect('localhost', 'root', '', 'people') or die(connect_error);
?>
您的查询语法中有一些错误,请仔细检查。
为了获得行数,我认为SELECT EXISTS(SELECT 1 FROM...)
是最有效的。
我也已经将连接传递给了这个函数,记住mysqli_
过程函数都需要连接句柄才能工作,这是将mysql_
转换为mysqli_
的主要问题之一
我还准备了语句并绑定了参数,以缓解SQL注入问题。
并添加了一些错误处理,将错误写入php错误日志。
<?php
function user_exists($con, $username) {
$cnt = 0;
$sql = "SELECT EXISTS(SELECT 1 FROM `users` WHERE `username` = ?";
$stmt = mysqli_prepare($con, $sql);
if ( $stmt === false ) {
error_log('user_exists() count failed: ' . mysqli_stmt_error($stmt), 0);
exit;
}
mysqli_stmt_bind_param($stmt, 's', $username);
$res = mysqli_stmt_execute($stmt);
if ( $res === false ) {
error_log('user_exists() count failed: ' . mysqli_stmt_error($stmt), 0);
exit;
}
mysqli_stmt_bind_result($stmt, $cnt);
return $cnt == 1;
}
?>
现在你必须修改对的呼叫
user_exists($connection, $username)