-1

$amountOfUsers が 0 と表示される理由がわかりません。

これは、bind_param 関数に移行する前に機能していました...準備の代わりに query() のみを使用していました。しかし、これははるかに安全です。これが機能しない理由と修正方法を理解するのに苦労しています。

$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?");
$stmt->bind_param('s', $username);
$stmt->execute();

//Counting results. 0 = Invalid, 1 = Valid
$amountOfUsers = $stmt->num_rows;

私が得ているエラーは次のとおりです: $amountOfUsers は結果の数を正しくカウントしていません。

4

3 に答える 3

1
$stmt = $mysqli->prepare("SELECT id, expire, status, username FROM username WHERE username= ?");
$stmt->bind_param('s', $username);
$stmt->execute();
// Store the result (so you can get the properties, like num_rows)
$stmt->store_result();
// Get the number of rows
$amountOfRows = $stmt->num_rows;

// Bind the result to variables
$stmt->bind_result($id, $expire, $status, $db_username);
// Process the variables
while($stmt->fetch()) {
    printf("%d %s %s %s\n", $id, $expire, $status, $db_username);
}
于 2013-09-10T22:51:37.167 に答える
0

計画通りに物事が進まないこともあります。ライブラリで利用可能な結果コードとエラーを確認することは、通常、見知らぬ人に尋ねるよりもトラブルシューティングに効率的ですが、この見知らぬ人が助けてくれることを願っています...次のパターンのいずれかを選択してください:

A:

$result = $stmt->execute();
if (!$result) { /* handle errors */ }

B:

$stmt->execute();
if ($stmt->errno != 0) { /* handle errors */ }

C (開発のトラブルシューティングのみ。残すコードではありません):

$stmt->execute();
print_r($stmt->error_list);

詳細と関連ページ: http://www.php.net/manual/en/mysqli-stmt.errno.php

于 2013-09-11T08:42:12.040 に答える
-2

なぜphpユーザーが返される行数にそれほど傾倒しているのか、私は一生理解できません。
特にフラグとしてのみ使用する場合...データが返された場合!

非常に返されたデータを取得して確認してみませんか?

$sql  ="SELECT id, expire, status, username FROM username WHERE username= ?s";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $username);
$stmt->execute();
$res = $stmt->get_result();
$row = $res->fetch_assoc();
if ($row)
{
    // do whatever
}

長くて風の強いコードへの傾向も理解できません。
抽象化ライブラリを手に入れて、すべてを 1 行で取得してみませんか?

$sql = "SELECT id, expire, status, username FROM username WHERE username= ?";
if ($row = $db->getRow($sql))
{
    // do whatever
}
于 2013-09-11T08:34:34.380 に答える