2010-12-28 15 views
1

私は、データを選択したいテーブルとフィールドのセットです。私は成功せずに以下のコードを試しました。誰にもなぜこれがうまくいかないのか、そしてできるだけそれを動作させる方法を説明することができますか?私が見ることができるPHP whileループ中のSQL SELECT

$fields = "table1.field1, table2.field2, table3.field3, table4.field4"; 
$tables = "table1, table2, table3, table4"; 
$table = explode(', ', $tables); //explode the tables string 
$field = explode(', ', $fields); //explode the fields string 


$i=1; 
while ($i<=4) { 
$sql = 'SELECT ' . $field[$i] . ' FROM ' . $table[$i] . ' WHERE ' . $field[$i] . ' LIKE "%' . $str . '%";'; 
$results = $readConn->query($sql); 
$i++; 
var_dump($results); 
} 
+0

あなたはテーブルとフィールドのセット全体よりも

$sql = sprintf("SELECT %s FROM %s WHERE %s LIKE '%%s%'", $field[$i], $table[$i], $field[$i], $str); 

? – outis

+0

あなたが私たちに正確に何をするべきであるか(http://www.catb.org/~esr/faqs/smart-questions.html#code)と何も言わずに何かがうまくいかない理由を言うのはむしろ難しいです。それは実際にはあります。 DBのクエリと結果では、サンプルのソースと結果のデータが非常に役立ちます。 4つのテーブルのデータ間の関係(ある場合)おそらく[joins](http://en.wikipedia.org/wiki/Join_%28SQL%29)を使用して、単一のクエリで結果を取得できます。 – outis

答えて

0

あなたはこのようなルックスを作成しているSQL:

SELECT table2.field2 FROM table2 WHERE table2.field2 LIKE "%%"; 
SELECT table3.field3 FROM table3 WHERE table3.field3 LIKE "%%"; 
SELECT table4.field4 FROM table4 WHERE table4.field4 LIKE "%%"; 
SELECT FROM WHERE LIKE "%%"; 

私はあなたに$ strを設定しているかわからないので、私はそれがここに含まれていません。代わりに< = 4

の SQLは、それは最後の1を除いて、正常に見える、実行する必要があります...あなたがするあなたのループを調整したいと思う、< 4は、あなたがへの有効な接続を持っていることをあなたは確かにありますデータベース?結果としてNULLか何か、またはエラーが戻ってきていますか?

また、マークの答えの項目#2。 また、個人的には、私はこれをはるかに読みやすくしています。この

$sql = 'SELECT ' . $field[$i] . ' FROM ' . $table[$i] . ' WHERE ' . $field[$i] . ' LIKE "%' . $str . '%";'; 
+0

完璧!ありがとうございました。 – Jack

2

2つのことは:単一引用符ではなく二重引用符でエスケープする必要があります

$sql = 'SELECT ' . $field[$i] . ' FROM ' ...etc... 

2)SQL文字列で:

1)あなたはSELECTキーワードを忘れてしまいました。結果はLIKE "%foo%"の代わりにLIKE '%foo%'に似ているはずです。

+1

ええ、それは助けになるだろう...]。また、私はこのようなインラインSQLを実行すると、$ sql = sprinft( "...")を使用して読みやすくすることができます。 –

+0

クイック返信ありがとう。私はそこにSELECTを持っています。私はこの質問にそれを追加するのを忘れてしまった。 – Jack

1

生成するクエリにSELECTキーワードがありません。 $ sqlを印刷すると、問題が何であるかがわかります。ちなみに、$ strがどこから来ているかによって、あなたが正しくエスケープしない限り、SQLインジェクション攻撃に脆弱になる可能性があります。