2010-12-28 7 views
1

Я набор таблиц и полей, которые я бы хотел выбрать. Я пробовал приведенный ниже код без успеха. Может ли кто-нибудь объяснить мне, почему это не работает, и, если возможно, как заставить его работать.SQL SELECT в PHP while loop

$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

Вам весь набор таблиц и полей? – outis

+0

Трудно сказать, почему что-то не работает, если вы не сообщите нам точно [что это должно делать] (http://www.catb.org/~esr/faqs/smart-questions.html#code) и что это на самом деле. Для запросов и результатов БД примеры источников и результатов данных чрезвычайно полезны. Каково отношение (если есть) между данными в четырех таблицах? Вероятно, вы можете получить результаты в одном запросе, используя [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 "%%"; 

Я не знаю, что вы настраиваете $ ул, поэтому я не он включен здесь. SQL, должен работать, она выглядит хорошо, за исключением того, что последний ... Вы хотите, чтобы настроить ваш цикл быть, < 4, вместо < = 4

Вы уверены, что у вас есть действительная связь база данных? Вы возвращаетесь NULL или что-то в результате или ошибка?

Также, пункт № 2 в ответе Марка. Кроме того, лично я считаю это более читаемым.

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

чем это

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

Отлично! Спасибо. – Jack

2

Две вещи, которые я могу видеть:

1) Вы забыли SELECT ключевое слово:

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

2) В строках SQL должны быть экранированы в одинарные кавычки, а не двойные кавычки. Результат должен быть похож на LIKE '%foo%' вместо LIKE "%foo%".

+1

Да, это поможет ... =]. Кроме того, я думаю, что при выполнении встроенного SQL, как это, вы можете попытаться сделать его более понятным с помощью $ sql = sprinft («...»); –

+0

Спасибо за быстрый ответ. У меня есть SELECT. Я просто забыл добавить его в этот вопрос. – Jack

1

В запросах, которые вы генерируете, отсутствует ключевое слово SELECT. Если вы распечатаете $ sql, будет очевидно, в чем проблема. Кстати, в зависимости от того, откуда исходит $ str, вы можете оставить себя уязвимым для атаки SQL-инъекции, если вы не избежите ее правильно.