phpのmysqliを使用したselectの抽出条件を指定した取得がうまくできません。分かる方がいたらご協力お願い致します。
※パラメータなしの場合であればうまくいきました。
php
1function select($sql, &$data, $params){ 2 $data = array(); //データ配列初期化 3 $mysqli = get_connection(); 4 if(is_null($mysqli)){ 5 return false; 6 } 7 if(!is_array($params))$params = array(); 8 9 if(count($params)>0){ 10 //パラメータが1つ以上存在する場合 11 $stmt = mysqli_stmt_init($mysqli); 12 if(!mysqli_stmt_prepare($stmt, $sql)){ 13 //SQLステートメント実行準備失敗 14 return false; 15 } 16 $stmt_params = array($stmt, ''); 17 foreach($params as $idx => $value){ 18 if(is_int($value))$stmt_params[1] .= 'i'; 19 else if(is_float($value))$stmt_params[1] .= 'd'; 20 else if(is_string($value))$stmt_params[1] .= 's'; 21 $stmt_params[] = &$params[$idx]; 22 } 23 call_user_func_array( "mysqli_stmt_bind_param" ,$stmt_params ); 24 if(!mysqli_stmt_execute($stmt)){ 25 //SQLステートメント実行失敗 26 return false; 27 } 28 29 $result = mysqli_stmt_get_result($stmt); 30 31 }else{ 32 //上記以外の場合 33 $result = mysqli_query($mysqli, $sql, MYSQLI_STORE_RESULT ); 34 } 35 36 while ($row = mysqli_fetch_assoc($result)){ 37 // 結果を処理 38 array_push($data, $row); 39 } 40 mysqli_free_result($result); 41 mysqli_close($mysqli); 42 43 return true; 44}
sql
1select 2 user_name 3from 4 USER 5where 6 user_id = $1 7and 8 user_password = $2 9
このSQLはなんでしょうか。function selectの引数として渡されている$sqlの中身でしょうか。$paramの中身はどうなっているのでしょうか。$dataが何の役にも立っていませんが、ソースコード省略されたりしてないでしょうか。
$sqlはその認識で問題ありません。$paramは配列で渡されてきます。$dataについては呼び出しもとにselectの結果を返しています。
そのparamの配列の中身を知りたいのです。また、このfunctionは最終的に「return true」をしているので、$dataは呼び出し元には返っていませんが
dataについては参照渡しで変数を渡しているとおもいます。配列の中身ですが、["param1","param2"]といった感じです
情報があいまいなので私の方ではこれ以上のサポートは難しいです。すみませんが他の回答者の方をお待ちください
「うまくできません」では意味がわからない。「●●という結果が欲しいのに、××になってしまう」というような具体的な表記をしないと回答のしようがない。
回答1件
あなたの回答
tips
プレビュー