0

こんにちは、mysql-function を 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」に変更しました。そうしないと、実際のカウントが「0」であっても、「num_rows」は常に 1 を返すためです。このようにして、一致した行の数が返されます。基本的に、「一致しない」場合は「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 に答える