$stmt = $db->prepare("SELECT * FROM test2 WHERE znaki1
LIKE :nac AND znaki2 LIKE :nac AND znaki3 LIKE :nac AND znaki4 LIKE :nac
AND znaki5 LIKE :nac AND znaki6 LIKE :nac AND znaki7 LIKE :nac AND znaki8 LIKE :nac
AND znaki9 LIKE :nac AND znaki10 LIKE :nac ORDER BY znaki1 DESC");
$stmt->bindValue(':nac', $nac . '%');
$stmt->execute();
//обработка результатов
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '';
print_r($row);
}
Во первых, ошибкой является использование while ($row = $stmt->fetchAll()), делающего совсем не то, что ты думаешь. Во вторых, телом цикла является единственный оператор $nac = array_shift($row);, а { echo '<pre>'; print_r($nac); } выполняется после завершения цикла.
На фига вообще читать таблицу целиком, тратя на это время и ресурсы сервера, если требуется всего одно значение?
Если тебе надо пройтись циклом по столбцу nac таблицы test1, то это делается так: $stmt = $db->query("SELECT nac FROM test1");
while (($nac = $stmt->fetchColumn()) !== false) {
// тело цикла, переменная $nac уже имеет нужное значение
} А если нужна только одна запись, то и запрос должен возвращать только одну запись.
подобный вопрос уже был, может и от тебя. если нужно одно значение, так и бери одно. если по всем nac то делай это в одном запросе с JOIN - один запрос к базе вместо нескольких.