PHP

Как правильно вывести что скрипт находит по части слова php7

//подключение
$db = new PDO("mysql:host=host;dbname=test", "root", "root"); // заменить
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // вывод ошибок при работе с БД
//запрос в тест1 для извлечения данных<br>
$stmt = $db->query("SELECT nac FROM test1");
while ($row = $stmt->fetchAll())

//получаем в переменную (nac) первую строку(при каждом проходе брать след строку) <br>
$nac = array_shift($row);
{
echo '<pre>';
print_r($nac);

}
//ищем значение из переменной nac в тест2 по части слова по столбцам <br>
$stmt = ("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");
{
echo '<pre>';
print_r($stmt);
}
в идеале как запихнуть то что он нашел в массив или хотя бы проверить что он нашол
Вот это вот:
 while ($row = $stmt->fetchAll()) 
//получаем в переменную (nac) первую строку(при каждом проходе брать след строку)
$nac = array_shift($row);
{
echo '
'; 
print_r($nac);
}
абсолютный бред.

Во первых, ошибкой является использование 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 уже имеет нужное значение
}
А если нужна только одна запись, то и запрос должен возвращать только одну запись.
Руслан Сорокин
Руслан Сорокин
84 983
Лучший ответ
Руст™ Матиас Может я вам заплачу а вы напишите весь код? если согласны напишите plohif007@mail.ru
нам делать больше нечего чем в твоем коде разбираться
Павел Козлов меня даже сам вопрос шибанул, как гунно в лифте...
 $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);
}
подобный вопрос уже был, может и от тебя. если нужно одно значение, так и бери одно. если по всем nac то делай это в одном запросе с JOIN - один запрос к базе вместо нескольких.
Лёха ***
Лёха ***
646