三元运算符(内联 "if statement")从 MySQL 到 MySQLi 的转换?

Ternary Operator (in-line "if statement") conversion from MySQL to MySQLi?

我的登录脚本快完成了,只是需要帮助寻找替代方法:

return (mysql_result($query, 0) == 1) ? true : false;

查询:

$query = mysqli_query($link, "SELECT COUNT 'id' FROM 'user_login_details' WHERE 'username' = '$username' AND 'password' = '$password'");

此查询旨在搜索归因于用户输入的 $password 和 $username 的用户 ID。

三元运算符语句基本上说,"return" "true" 如果记录的 "id" 用户的用户名和密码是“==1”。通过使用 mysql_result 的第二个参数检查行号,基本上确保记录存在并且详细信息实际存在于数据库中。这是我的第一条记录,所以数字将是 0。

$link

我发现从 mysqli 开始,现在每个查询都需要数据库 link 连接(有点奇怪,因为它使事情变得复杂)但主要问题是 mysqli_result 没有它不存在,所以我需要找到一个内置函数(或自己构建一个)来检查查询结果 (id) 的行号并检查它是否等于 1。

我基本上希望能够这样写:

return (mysqli_result($query, 0) == 1) ? true : false;

如有帮助将不胜感激,

汤姆

你基本上想要的是:

function sqlResult($q, $count) { 
    if (!$q)
        return false;
    if ($arr = mysqli_fetch_array($q) && $count < count($arr)) { 
        return $arr[$count];
    } else { 
        return false;
    }
}

然而,如果我没记错的话,你仍然需要逃避你的username/password,否则注入仍然是可能的。 参见 http://php.net/manual/en/mysqli.real-escape-string.php

mysql_result 的完美替代品:

function mysqli_result($res, $row=0, $col=0)
{ 
    $numrows = mysqli_num_rows($res); 
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])) return $resrow[$col];
    }
    return false;
}

这个呢? (未测试)

return (mysqli_fetch_row($query)[0] == 1) ? true : false

注意:PHP函数数组解引用需要 5.4.0 或更高版本