0

アップデート:

mysqli で助けが必要なエラーと警告がいくつかあります。

Fatal error: Call to undefined method mysqli_stmt::get_result() in ... on line 63

以下の私のコードでは、これらの警告とエラーをどのように処理できるか知っている人はいますか?

$query = "SELECT * FROM Teacher WHERE TeacherAlias = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$getid);
// execute query
$stmt->execute();  
//get results
$result = $stmt->get_result(); 

$numrows = mysqli_num_rows($result);
if ($numrows == 0){   

       // don't use $mysqli->prepare here
$query = "SELECT * FROM Teacher WHERE TeacherUsername = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$getuser);
// execute query
$stmt->execute(); 

}
4

3 に答える 3

2

まず、次のようなmysqli_resultオブジェクトを取得する必要があります...

$res = $stmt->get_result();

... 次に、このオブジェクトから行数を取得します ( ではありません$stmt):

$numrows = mysqli_num_rows($res);

更新: get_resultメソッドは PHP 5.3 以降でのみ使用できます。古いバージョンでは、次のアプローチを使用する必要があります。

// $stmt preparing code goes here...

$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;
doSomethingWith($num_rows);

// processing cycle:
$stmt->bind_result($some_param, $another_param);
while ($stmt->fetch()) {
   doSomethingElseWith($some_param, $another_param);
}
$stmt->free_result();
$stmt->close();

補足として、2 つの推奨事項: 1) ここで単一のクエリを使用し、TeacherAlias フィールドと TeacherUsername フィールドの両方で同時に値を検索する方がおそらく高速です (OR 演算子を使用TeacherAlias = ? OR TeacherUsername = ?)。2)クエリでSELECT id, TeacherAlias AS alias, TeacherUsername AS username...( ) だけでなく、明示的に指定された列 ( ) を使用する方が簡単です。SELECT *

于 2012-08-23T22:55:53.920 に答える
0

私は msqli での作業に慣れていませんが、あなたに答えようとします。まず、プログラムに「要求の結果が 0 の場合は、すべてを再起動します。これはあまり良くありません。 「リソースを無駄に使っている。raina77ow が言ったように、使いたい」

$res = $stmt->get_result();

この:

$numrows = mysqli_num_rows($res);

その場合、あなたはもうあなたの状態を必要としません...

于 2012-08-23T23:02:00.483 に答える
0

最初にデータを取得する必要があります。またはfree_result().

$stmt->fetch();

次に、これをに渡しますmysqli_num_rows()

私が提案するのは、フェッチが必要ない場合はフェッチをスキップして、次のことを行うことです。

$stmt->num_rows;

これにより、結果をフェッチする必要なく結果の行数がカウントされ、カーソルがクリアされます。

于 2012-08-23T23:04:37.953 に答える