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 . '%";';