質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1915閲覧

mysqli パラメータ複数指定のselect

coko1

総合スコア276

mysqli

MySQLiはPHP5より導入されているデータベース用のドライバです。MySQL 4.1.3以降の新しい機能の利点をまとめています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/02/16 05:48

編集2017/02/16 06:39

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kunai

2017/02/16 06:02

このSQLはなんでしょうか。function selectの引数として渡されている$sqlの中身でしょうか。$paramの中身はどうなっているのでしょうか。$dataが何の役にも立っていませんが、ソースコード省略されたりしてないでしょうか。
coko1

2017/02/16 06:12 編集

$sqlはその認識で問題ありません。$paramは配列で渡されてきます。$dataについては呼び出しもとにselectの結果を返しています。
kunai

2017/02/16 06:15

そのparamの配列の中身を知りたいのです。また、このfunctionは最終的に「return true」をしているので、$dataは呼び出し元には返っていませんが
coko1

2017/02/16 06:26

dataについては参照渡しで変数を渡しているとおもいます。配列の中身ですが、["param1","param2"]といった感じです
kunai

2017/02/16 06:32

情報があいまいなので私の方ではこれ以上のサポートは難しいです。すみませんが他の回答者の方をお待ちください
zico_teratail

2017/02/16 06:46

「うまくできません」では意味がわからない。「●●という結果が欲しいのに、××になってしまう」というような具体的な表記をしないと回答のしようがない。
guest

回答1

0

自己解決

SQLの$1等を?に変更することで解決しました。

投稿2017/02/16 08:49

coko1

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問