2

php.netを調べた後もまだ混乱しています。

php.net から: mysqli_stmt::bind_result -- mysqli_stmt_bind_result — 変数を結果ストレージ用の準備済みステートメントにバインドし、結果セット内の列を変数にバインドします。

私の不確実性: 「列をバインドする」 - どの列ですか? PHP は変数 (var1、var2 など) を列に配置します。列はデータベース内の列を参照していますか? それまでの間、myqli bind_result() に関連する列を調査します。

php.net から: データを取得するために mysqli_stmt_fetch() が呼び出されると、MySQL クライアント/サーバー プロトコルは、バインドされた列のデータを指定された変数 var1, .... に配置します。

私の不確実性: 「指定された変数 var1 へのデータ」 - どのデータですか? これはユーザーが提供するデータですか? bind_result($x) が生成して返したデータは (魔法のように?)

私はまた、同様の問題を抱えているメンバーからの Stackoverflow の投稿を通じて、この関数の理解を得ようとしました - (bind_result を使用して配列にプッシュする) 6 月 17 日 20:36 jskidd3 に尋ねました - 彼のコード例は私のものと非常に似ていましたが、彼の質問は、私がここに持っている質問ほど基本的ではありませんでした。

私は mysqli の "bind_result()" 関数を深く理解しようとしていますが、表面で何が起こっているのかさえわかりません。では、この関数の目的は何ですか? また、バインド結果の後の準備ステートメントがどのようになるかを理論的に説明できますか? 可能であれば、私が PHP.net サイトから残したあいまいさを解消していただけますか? http://www.mustbebuilt.co.uk/2011/11/17/mysqli-cheatsheet/から取得した以下の例を使用できます。

以下の例では、bind_result($filmName) に渡される $filmName の値がわかりません。また、echo 出力を介して結果がどうなるかもわかりません。

この機能で何が起こっているのかを理解するのを手伝ってくれて、本当に感謝しています。ありがとうございました!!

シナリオのクエリ - 準備を使用したユーザー入力からの 1 行:

$stmt = $mysqli->prepare("SELECT filmID, filmName FROM movies WHERE filmID = ?");
$stmt->bind_param('i', $_GET['filmID']);
$stmt->execute(); 

//what value is being passed - and where is $filmName(and it's value) coming from?
$stmt->bind_result($filmName); 
$stmt->fetch();
$stmt->close();

//resulting value or output displayed? 
echo $filmName;
4

2 に答える 2

-1

「列をバインド」

クエリの結果の列を参照します。

「指定された変数 var1 へのデータ」

フェッチ ( など) を実行すると$stmt->fetch()、バインドされた変数にバインドに基づいて値が割り当てられます。毎回明示的に値を割り当てる必要はありません。

お問い合わせについて

$stmt = $mysqli->prepare("SELECT filmID, filmName FROM movies WHERE filmID = ?");

列は、順番に、filmIDfilmNameです。

を呼び出すとbind_result、最初の変数が結果の最初の列にバインドされます。この場合、

$stmt->bind_result($filmName); 

$fileName実際には、変数をfilmIDフィールドにバインドすることになります。

filmName を適切にバインドする場合は、クエリを作り直して、filmName が最初になるようにすることができます。

$stmt = $mysqli->prepare("SELECT filmName, filmID FROM movies WHERE filmID = ?");

または、filmID 変数をバインドできます。

$stmt->bind_result($filmID, $filmName); 
于 2013-10-21T05:54:13.767 に答える