SQL SELECT в PHP, пока цикл - PullRequest
       31

SQL SELECT в PHP, пока цикл

1 голос
/ 28 декабря 2010

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

$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);
}

Ответы [ 3 ]

2 голосов
/ 28 декабря 2010

Я вижу две вещи:

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

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

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

1 голос
/ 28 декабря 2010

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

0 голосов
/ 28 декабря 2010

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, поэтому здесь его нет. SQL должен работать, он выглядит нормально, за исключением последнего ... Вам нужно настроить цикл так, чтобы он был <4 вместо <= 4 </p>

Вы уверены, что у вас есть действующее соединение с базой данных? Вы получаете 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 . '%";';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...