-1

以下は正常に動作するコードですが、mysql_* を使用しており、もう必要ありません。mysqli でこのセクションをやり直そうとしましたが、うまくいきません。必要に応じてコード全体を投稿できますが、問題がどこにあるかはわかっています。以下はコードです:

年:

public function verifyDatabase()
    {
        include('dbConfig.php');

        $data = mysql_query("SELECT client_id FROM clients WHERE client_email_address = '{$this->_username}' AND client_password = '{$this->_pass_sha1}'");

        if(mysql_num_rows($data))
        {
            list($this->_id) = @array_values(mysql_fetch_assoc($data));
            return true;
        }
        else 
        {
            return false;
        }
    }

新しい:

public function verifyDatabase()
    {
        include('dbConfig.php');

        $data = $db->prepare("SELECT client_id FROM clients WHERE client_email_address = ? AND client_password = ? LIMIT 1");
        $data->bind_param($this->_username, $this->_pass_sha1);
        $data->execute();
        $data->store_result();

        if($data->num_rows)
        {
            list($this->_id) = @array_values($data->fetch());
            return true;
        }
        else 
        {
            return false;
        }
    }

私はまだmysqliを学んでおり、少し混乱しているため、PDOの準備が整っていません。私が言うように、このスクリプト全体は mysql_* では完全に機能しますが、mysqli ではそれほど機能しません。フォームにログインしようとすると、エラーが表示されず、次のページに進むこともありません。そのため、このビットが問題であることがわかります

4

2 に答える 2

0

古い mysqlまたは最新の mysqli でヘルパー関数を使用することをお勧めします。

public function verifyDatabase()
{
    $sql = "SELECT client_id FROM clients WHERE email = ? AND password = ?";
    return $this->db->getOne($sql ,$this->_username,$this->_pass_sha1);
}

また、dbConfig.phpはevery メソッドに含めるのではなく、onceに含める必要があることに注意してください。DBハンドラーはコンストラクターのクラス変数に割り当てる必要があります。

于 2013-09-13T04:48:53.107 に答える
-1

コードをこれに変更します。問題が解決するとは言いませんが、良くなります。

public function verifyDatabase()
{
    include('dbConfig.php');

    $data = $db->prepare("SELECT client_id FROM clients WHERE client_email_address = ? AND client_password = ? LIMIT 1");
    $data->bind_param($this->_username, $this->_pass_sha1);
    $data->execute();
    $data->store_result();

    if($data->num_rows > 0)
    {
        $result = $data->fetch();
        $this->_id = $result['client_id'];
        return true;
    }
    else 
    {
        return false;
    }
}

var_dump($result); を置くこともできます。$result = $data->fetch(); の後 正確に何が返されているかを出力する行。

于 2013-09-12T22:34:54.720 に答える