1

これはコードです:

$q = $this->db->prepare("SELECT id FROM `users` WHERE username=? AND password=? LIMIT 1");
$q->bind_param('ss', $username, $password);
$q->execute();
printf('Rows returned: %i', $q->num_rows); 

MySQLiを使用して、ユーザーのログイン資格情報を確認しています。すべてが機能し、クエリが実行されてデータが返されます(これを個別にチェックしました)が、次の出力しか得られません:Rows returned:

ここに何か問題がありますか?私はMySQLiを使用するのは初めてですが、PHP.netの例を見ると、このコードに問題はありません。乾杯。

4

2 に答える 2

5

ドキュメントから:

mysqli_stmt_store_result()を使用せず、プリペアドステートメントの実行後にこの関数をすぐに呼び出す場合、結果セットがメモリに保存されないため、結果セットに含まれる行数を知る方法がないため、この関数は通常0を返します。まだ。

mysqli_stmt_store_result()は結果セットをメモリに保存するため、ステートメントの実行と結果セットの保存の両方を行った後、すぐにこの関数を使用できます。

したがって、次のように変更する必要があります。

$q->bind_param('ss', $username, $password);
$q->execute();
$q->store_result();
printf('Rows returned: %d', $q->num_rows);
于 2010-08-30T17:39:47.317 に答える
0

正しい方向に進んでいるかどうかはわかりませんが、結果を最初の行に制限している場合は、基本的に結果が空かどうかを確認するだけで済みます。使用する場合:

$result = mysql_query($query);    

私は次のようなもので行くことを提案したでしょう:

if (!$result)

しかし、あなたがしていることは通常のphp呼び出しのようには見えませんが、それでもこれが役立つことを願っています。

于 2010-08-30T17:45:55.853 に答える