-1

私は最近小さなプロジェクトに取り組んでおり、PHP 関数の 1 つがユーザー名が存在するかどうかを確認し、それが機能するかどうかを確認しましたが、間違ったテーブルを読み取ります。todo_users を読み取り、users テーブルを読み取ります。これが私のコードです:

Connect.php

class Connect
{
    public $sqlHost='MySQLHost';
    public $sqlUser='MySQLUser';
    public $sqlPass='MySQLPass';
    public $sqlDB='MySQLDB';
    public $tablePrefix='todo';

    public function connect(){
        return new mysqli($this->sqlHost, $this->sqlUser, $this->sqlPass, $this->sqlDB);
    }
}

注: 明らかなセキュリティ上の理由から、sql 変数を置き換えました。

関数:

public static function exists($username) {
    $connect = new Connect();
    $c = $connect->connect();
    $t = $connect->tablePrefix."_users";
    $stmt = $c->prepare("SELECT username FROM `".$t."` WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->store_result();
    $num_row = $stmt->num_rows;
    $stmt->bind_result($result);
    if($num_row === 0) {
        return "false";
    } else {
        return "true";
    }
    $stmt->close();
    $c->close();
}

関数が呼び出される checkuser.php:

 require_once("userfunc.php");
 if(isset($_POST["user"]))
 {
    $username = $_POST["user"];
    if(USERFUNC::exists($username)) {
        echo "YES";
    } else {
        echo "NO";
    }
 }

編集: 私が使用しているバージョンは次のとおりです: PHP バージョン 5.3.18 MySQL バージョン 5.1.68

助けてください。前もって感謝します。

4

3 に答える 3

2

文字列"false"は、空でない文字列と同様trueに、任意の条件と同様に評価されます。

return false;代わりに実行してくださいreturn "false";。うまくいくと思います。

于 2013-04-30T18:17:16.410 に答える
0

貼り付けたコードでは不可能です。

間違ったコード (古いバージョン? 間違った URL?) を実行していると思います。そのため、プレフィックスのないテーブルからの結果が表示されます。

于 2013-04-30T17:56:14.007 に答える
0

チェックを逆にしてみてif(num_rows)ください -

if($num_row === 1) {  // or $num_row == 1
        return "true";
    } else {
        return "false";
    }

この方法では、正確に 1 つの行がある場合にのみ trueusername = $usernameを返し、それ以外はすべて false を返します。

于 2013-04-30T18:06:08.537 に答える