0

您好,我想将 mysql 函数转换为 mysqli 版本。此功能用于检查用户是否存在。所以我是函数的新手,甚至是 mysqli 的新手。这就是为什么我在转换它时遇到问题。

mysql版本是:

function a($uname){
    return (mysql_result(mysql_query("SELECT COUNT (`a`) FROM `table_1` WHERE `a`='$uname'"), 0) == 1) ? true : false;
}

我认为的mysqli版本是:

function a($uname){
        return (mysqli_num_rows(mysqli->query("SELECT COUNT (`a`) FROM `table_1` WHERE `a`='$uname'"), 0) == 1) ? true : false;
    }

我知道没有 mysql_result 了。我决定使用 mysqli_num_rows。但这个功能不起作用,我不知道为什么。error_reporting 已启用,但在调用页面时,我会得到一个没有错误消息的空白页面?!

所以如果有人可以帮助我,我真的很感激。

多谢。

4

2 回答 2

0

文档中免费: mysqli->query为查询返回一个 mysqli_result 对象,该对象实际上返回一些结果,为失败的查询返回“false”,为所有其他查询返回“true”(如果成功)。

除非您更彻底地检查结果,否则您对查询结果一无所知。

尝试这样的事情:(假设连接已经成功建立,并且 $uname 已经正确转义。)

function a($uname) {
    $found = false;
    $result = mysqli->query("SELECT `a` FROM `table_1` WHERE `a`='$uname'");
    if($result) {
        //We used a 'SELECT' query and the query was successful. That means, we now have a mysqli_result object.
        $found = ($result->num_rows == 1);   //Determines, if something was actually found or not.
        $result->close(); //Frees some ressources. Not necessary, but doesn't hurt either.
    } else { //The query failed, as such we have nothing to evaluate.
         die("Queryerror: ".mysqli->error);
    }
    return $found;
}

我将查询参数从“COUNT”更改为“a”,否则“num_rows”将始终返回 1,即使实际计数为“0”。这样,它返回匹配的行数,基本上返回“0”表示“不匹配”或“1”表示“匹配”。

于 2013-02-21T17:25:07.423 回答
0

您需要一个辅助函数来将所有肮脏的 mysqli 内部组件置于幕后。
safemysql一样。它也可以模仿 mysql_result:

function a($uname){
    global $db; // with mysqi you have to connect once and then use this connection
    return (bool)$db->getOne("SELECT COUNT (1) FROM table_1 WHERE a=?s"), $uname);
}

并且可以解决几十个类似的问题。

于 2013-02-21T17:25:42.293 回答