2016-09-16 9 views
-1

列の値が配列の要素のいずれかと一致したときにレコードを返すクエリを作成しています。私はそれが動作する静的配列(サンプルを参照)を使用する場合:返される行where phpとsqlの変数配列の中の列

sql = "SELECT * 
     FROM tasks 
      WHERE 
      tasks.type IN ('homework', 'chores', 'laundry')"; 

を私は比較から使用したいユーザー入力から移入されたタスクの配列を持っている場合はどう?このように:

$task_list = //declaration and populate the array. I know it works, so I'm skipping it 

sql = "SELECT * 
      FROM tasks 
       WHERE 
       tasks.type IN "+$task_list+" "; 

これは私にエラーが発生します。 私は実際にSQLとPHPを混在させていないので、答えを探しました。おそらく正しい構文を正しく検索できませんでした。知りたいという方のため

var_dump($task_list);は、次のように出力されます

array(3) { [0]=> string(8) "homework" [1]=> string(6) "chores" [2]=> string(7) "laundry" } 
+0

それがうまくいくなら、それはなぜSQLで壊れていますか? '$ task_list'を生成するために何をしているのかを示す必要があります。あなたがそこに詰め込んだものは、あなたのクエリに詰め込まれても、VALID sqlになるはずです。構文エラーが発生するため、有効なsqlではなく、ビルドコードが正しく動作していません。 –

+2

また、 '+'はPHPでは数学的に追加されたものであり、文字列連結ではありません。 –

+0

コードはかなり長いです。私は配列の内容をチェックするためにvardumpを行った。私は答えに追加することができます。何が間違っているのは、この配列をクエリに含める方法です。 –

答えて

2

$ task_listが配列であるので、あなたはこのような何かを行う必要があります失敗します。

$task_list_str = sprintf('"%s"', implode('", "', $task_list)); 
$sql = 'SELECT * 
     FROM tasks 
     WHERE 
      tasks.type IN (' . $task_list_str . ')'; 

それは少し複雑ですしかし、それはあなたのコードから可能な限り近くにとどまります。

これが役に立ちます。

+0

ありがとう、それは(それは仕事をした)多くの助けになりました。私は実際にはPHPやSQLでプログラミングしていないだけで、友人を助けていた。しかし、シンプルにするためにコードを変更する方法についてのアドバイスがあれば、それを学びたいと思っています。 –

関連する問題