いつもお世話になっております。
PHP5.2.5
---------------------------
DB(フィールドは以下3項目)
・id(primary key)
・color
・num
---------------------------
//DBにインサートするデータ群(配列に格納してある)
$insert_array = array('color'=>'red','num'=>6);
//==================================================
// *フィールド名とそれに対応するデータをバインドする。
//==================================================
//==================================================
// *バインド:方法1
//==================================================
foreach($insert_array as $field => $value){
//確認処理
//echo $field.'<br/>';
//echo $value.'<br/>';
//バインド(foreachで、1つずつバインドしていく)
$stmt->bindParam(':'.$field,$value);
}
//==================================================
// *バインド:方法2(↓こちらだと上手くいく。)
//==================================================
/*
$stmt->bindParam(':'.'color',$insert_array['color']);
$stmt->bindParam(':'.'num',$insert_array['num']);
*/
//==================================================
// *バインド後、「$stmt->execute();」した結果
// *DBにインサートされたものをprint_r()にて確認
//==================================================
★方法1
Array
(
[id] => 15
[color] => 6
[num] => 6
)
//---------------------------
★方法2
Array
(
[id] => 16
[color] => red
[num] => 6
)
//---------------------------
★方法1の結果の、「 [color] => 6」って一体…?!
方法2のように、同じバインド処理を手書きで繰り返す分にはうまくいくのですが、
方法1のようなforeachでまとめて処理するやり方だとうまくいきません。
方法1の問題箇所をどなたか教えて下さい。
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
bindParamでバインドされるのは変数の値ではなく変数です。
また、マニュアルから引用すると「変数は参照としてバインドされ、PDOStatement::execute() がコールされたときのみ評価されます。」
なので、foreach内での
>$stmt->bindParam(':'.$field,$value);
は、言ってみれば$valueの位置を記憶しているにすぎません。
で、execute実行時に初めて中身の値を取りに行き、そこに入っているもの(要するにforeachの最後の値)をセットしてしまっています。
参考URL:http://www.php.net/manual/ja/pdostatement.bindpa …
早速どうもありがとうございます。
>bindParamでバインドされるのは変数の値ではなく変数
すぱっと理解できました。
では、いざ挑戦してきます!
うまく動くことが確認できましたら、回答を締め切らせて頂きます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでクラスのメソッドで同名の...
-
phpでPEAR::DBを使っているので...
-
phpでcookieがうまく保存されない
-
値の取り出し方について教えて...
-
入力した部分を表示させたまま...
-
PHPとHTML+Xamppの掲示板で画像...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
-
なんでブラウザでPHPを動かすた...
-
入力フォームの空白や改行を制...
-
PHP8を使うと、大量のWarningが...
-
どうして送信されないのでしょ...
-
php 入力画面から確認表示画面...
-
プログラムコードを入力する場...
-
メールフォームのタイトルが文...
-
php 完了画面の送信メールのコ...
-
phpのメールフォームの完了画面...
-
画像ファイルの名前をそのままU...
-
PHP と MySQL でテーブルの行数...
-
awsにApacheとPHPを入れて、何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スカラーのベクトル微分
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
ファイルの書き込みについて教...
-
php で1から100までの素数の表...
-
C言語の配列をPush(追加)する...
-
配列の要素(value)に、変数を...
-
STLのvectorで作った配列をメン...
-
C言語 最大値と最小値を求めて...
-
行列
-
verilogで、配列の一部をタスク...
-
CArrayのソート
-
PHPのセレクトボックスの初期値...
-
Perlで重複行を削除したい
-
pythonのnumpyでの繰り返しでの...
-
System.String.Splitでエラー
-
連想配列から<th>を含むテーブ...
-
2次元配列CSVのソート
-
Pager::factory()の使い方がわ...
-
【PHP】配列のキー名の修正は可...
おすすめ情報