bind_result
vs.get_result
を使用して呼び出す方法の例と、一方を他方の上に使用する目的は何であるかを確認したいと思います。
また、それぞれを使用することの長所と短所。
どちらかを使用する場合の制限は何ですか?違いはありますか?
bind_result
vs.get_result
を使用して呼び出す方法の例と、一方を他方の上に使用する目的は何であるかを確認したいと思います。
また、それぞれを使用することの長所と短所。
どちらかを使用する場合の制限は何ですか?違いはありますか?
回答:
私にとって決定的な要因は、を使用してクエリ列を呼び出すかどうか*
です。
bind_result()
は使用する方が良いでしょう:// Use bind_result() with fetch()
$query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
get_result()
は使用する方が良いでしょう:// Use get_result() with fetch_assoc()
$query2 = 'SELECT * FROM table WHERE id = ?';
$query1
使用例1bind_result()
$query1 = 'SELECT id, first_name, last_name, username FROM table WHERE id = ?';
$id = 5;
if($stmt = $mysqli->prepare($query)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Store the result (to get properties) */
$stmt->store_result();
/* Get the number of rows */
$num_of_rows = $stmt->num_rows;
/* Bind the result to variables */
$stmt->bind_result($id, $first_name, $last_name, $username);
while ($stmt->fetch()) {
echo 'ID: '.$id.'<br>';
echo 'First Name: '.$first_name.'<br>';
echo 'Last Name: '.$last_name.'<br>';
echo 'Username: '.$username.'<br><br>';
}
/* free results */
$stmt->free_result();
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
$query2
使用例2get_result()
$query2 = 'SELECT * FROM table WHERE id = ?';
$id = 5;
if($stmt = $mysqli->prepare($query)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Get the result */
$result = $stmt->get_result();
/* Get the number of rows */
$num_of_rows = $result->num_rows;
while ($row = $result->fetch_assoc()) {
echo 'ID: '.$row['id'].'<br>';
echo 'First Name: '.$row['first_name'].'<br>';
echo 'Last Name: '.$row['last_name'].'<br>';
echo 'Username: '.$row['username'].'<br><br>';
}
/* free results */
$stmt->free_result();
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
あなたが見ることができるようにあなたが使用することはできませんbind_result
と*
。ただし、get_result
両方で機能しますが、bind_result
より単純で、。を使用していくつかの混乱を取り除き$row['name']
ます。
長所:
$row['name']
fetch()
短所:
*
長所:
fetch_assoc()
短所:
$row[]
例は、それぞれのマニュアルページにあります。
長所と短所は非常に単純ですが:
とにかく、あなたのアイデアがアプリケーションコードでどちらかの関数を正しく使用することであるなら、このアイデアは間違っています。ただし、クエリからデータを返すために何らかのメソッドにカプセル化されている限り、bind_resultを実装するために10倍のコードが必要になることを除けば、どちらを使用するかは実際には重要ではありません。
私が気付いた主な違いは、ネストされた$ stmtを他の$ stmt内にコーディングしようとすると、フェッチされている(なしで)bind_result()
エラーが発生2014
することです。mysqli::store_result()
準備に失敗しました:(2014)コマンドが同期していません。現在、このコマンドを実行することはできません
メインコードで使用される関数。
function GetUserName($id)
{
global $conn;
$sql = "SELECT name FROM users WHERE id = ?";
if ($stmt = $conn->prepare($sql)) {
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->bind_result($name);
while ($stmt->fetch()) {
return $name;
}
$stmt->close();
} else {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
}
メインコード。
$sql = "SELECT from_id, to_id, content
FROM `direct_message`
WHERE `to_id` = ?";
if ($stmt = $conn->prepare($sql)) {
$stmt->bind_param('i', $myID);
/* execute statement */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($from, $to, $text);
/* fetch values */
while ($stmt->fetch()) {
echo "<li>";
echo "<p>Message from: ".GetUserName($from)."</p>";
echo "<p>Message content: ".$text."</p>";
echo "</li>";
}
/* close statement */
$stmt->close();
} else {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
bind_result
正しく使用していません
$stmt->store_result()
すると、$stmt
他の内部にネストすることができます$stmt
mysqli_stmt::bind_result
PHP.netには私に私のミスについては何も教えてくれない...それとも、使用することをお勧めしますか$stmt->store_result()
?
mysql_store_result ()
大きな結果セットを送信すると問題になる可能性があると思いましたか、それとも間違っていますか?ええ、この例では、それほど重要ではないかもしれませんが...とにかく、私を修正するためのthnx :)
get_result()は、MySQLネイティブドライバー(mysqlnd)をインストールすることにより、PHPでのみ使用できるようになりました。一部の環境では、mysqlndをインストールすることが不可能または望ましくない場合があります。
それでも、mysqliを使用して「select *」クエリを実行し、フィールド名で結果を取得できます。ただし、get_result()を使用するよりも少し複雑で、phpのcall_user_func_array()関数を使用する必要があります。単純な「select *」クエリを実行し、結果(列名を含む)をHTMLテーブルに出力するphpでget_result()の代わりにbind_result()を使用する方法の例を参照してください。
store_resultとget_resultはどちらもテーブルから情報を取得するため、例2はこのようにしか機能しないと思います。
だから削除
/* Store the result (to get properties) */
$stmt->store_result();
そして、順序を少し変更します。これが最終結果です。
$query2 = 'SELECT * FROM table WHERE id = ?';
$id = 5;
if($stmt = $mysqli->prepare($query)){
/*
Binds variables to prepared statement
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets
*/
$stmt->bind_param('i',$id);
/* execute query */
$stmt->execute();
/* Get the result */
$result = $stmt->get_result();
/* Get the number of rows */
$num_of_rows = $result->num_rows;
while ($row = $result->fetch_assoc()) {
echo 'ID: '.$row['id'].'<br>';
echo 'First Name: '.$row['first_name'].'<br>';
echo 'Last Name: '.$row['last_name'].'<br>';
echo 'Username: '.$row['username'].'<br><br>';
}
/* free results */
$stmt->free_result();
$row[]
ます。詳細な説明ありがとうございます!1つの注意; マニュアルによると、get_result()はmysqlndでのみ使用できます。