【问题标题】:mysql_result equivalent in mysqli [duplicate]mysqli中的mysql_result等效[重复]
【发布时间】:2016-08-12 18:21:47
【问题描述】:

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

【问题讨论】:

  • 你的连接变量是什么??
  • 我添加了它。它叫做 $connect
  • 我在 mysql 中找不到 mysql_return 等效项...!?那应该是什么?
  • 1) 您没有将 $connect 传递给您的 mysqli_query,2) 您对 MySQL 注入持开放态度。
  • 你最好尝试检查查询结果的行数,然后根据行数返回一个布尔值

标签: php mysql mysqli


【解决方案1】:

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

为了获得行数,我相信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)

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 2014-03-23
    • 2014-04-03
    • 2012-08-22
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多