mysql_result equivalent in mysqli


mysql_result equivalent in mysqli

所以我想计算与给定"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)