mysql_result等效于mysqli

时间:2016-04-20 08:08:11

标签: php mysql mysqli

所以我想计算与给定'用户名'匹配的条目数,并取决于它的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 ;
}
?>

这是我将使用user_exists()函数的地方。

<?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);
?>

1 个答案:

答案 0 :(得分:1)

您的查询语法有一些错误,请仔细检查。

要获得行数,我相信SELECT EXISTS(SELECT 1 FROM...)效率最高。

我还传递了与此函数的连接,请记住mysqli_任务函数都需要连接句柄才能工作,这是将mysql_转换为mysqli_ <的主要问题之一/ p>

我还准备了语句并绑定了param以缓解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)