PHP/7.2.3
該当のソースコードのクエリメソッドを実行するとクエリは実行できるのですが、以下のようなエラーメッセージが出てしまいます。
自分でいろいろ調べたり試したりしてみましたがエラーの理由がわかりませんでした。
ご教授のほどよろしくお願いいたします。
Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in ~ on line 123 Warning: Parameter 3 to mysqli_stmt::bind_param() expected to be a reference, value given in ~ on line 123
DBクラス
PHP
1 2 function query($sql){ 3 $this->sql=$sql; 4 if($this->types<>""){ 5 if($stmt = $this->mysqli->prepare($sql)){ 6 call_user_func_array( 7 array( 8 $stmt, 9 'bind_param' 10 ), 11123 $this->bindget() 12 ); 13 $stmt->execute(); 14 }else{ 15 $stmt=false; 16 } 17 }else{ 18 $stmt = $this->mysqli->query($sql); 19 } 20 21 return $stmt; 22 } 23 24 function bindget(){ 25 if(PHP_VERSION_ID > "50000" && PHP_VERSION_ID <= "50300"){ 26 return array_merge(array($this->types), $this->bind_val); 27 }else{ 28 return array_merge(array($this->types), $this->refValues($this->bind_val)); 29 } 30 break; 31 } 32 33 function refValues($arr){ 34 35 $refs = array(); 36 37 foreach ($arr as $key => $value){ 38 $refs[$key] = &$arr[$key]; 39 } 40 return $refs; 41 }
エラーの意味自体は調べたのでしょうか?調べた内容を具体的に明記されたほうが丸投げ感が減って回答もつきやすくなりますよ。(できれば質問テンプレートを利用していただきたいです)
だから前に「どうして英語読まないんですか?」という、核心をついた質問したのに、運営が都合悪いからって削除したせいで有耶無耶にされたんですよねぇ。
運営は反省すべきです。
んーでまぁ、どういうことかというと
bind_param() は reference(参照)を expected(期待)している, でも、value(値)が given(渡された)ので、PHPさんが怒っているのです。
で、bind_param()
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
このように、第二引数と第三引数以降は参照でなければならないわけです。
lucker さん それもう回答ではないでしょうか・
いや、多分、そっから先が本題になるので、それを質問者さんと回答者さんでがんばってもらおうと外野は思っております…
>>mts10806さん はい、過去の質問等も調べたりしてかなりの時間を費やしましたがそれでも解決しなかったので質問しました。アドバイスありがとうございます。
では調べた内容追記してくださいね。luckerさんのコメントも解決のヒントになると思います。
あとは、もう少しソースコード全体を提示されたほうが良いように思います$thisを利用されているので何らかのクラスかとは思いますが、ここだけでは全体像が見えづらいです。
>>luckerさん アドバイスありがとうございます。おかげさまでどこがいけないかが何となく理解することができました。もう少し自分で試行錯誤してみます。ありがとうございます。
>>mts10806さん 承知致しました。たしかに一部のソースコードだけコピペして説明もなく丸投げな質問でした。次回から気を付けます。
あれ?退会してしまいましたか