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

Регистрация
18 Янв 2013
Сообщения
96
Репутация
1
Спасибо
0
Монет
0
//подключение

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

}

в идеале как запихнуть то что он нашел в массив или хотя бы проверить что он нашол
 
$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) первую строку(при каждом проходе брать след строку)

$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 уже имеет нужное значение
} А если нужна только одна запись, то и запрос должен возвращать только одну запись.
 
подобный вопрос уже был, может и от тебя. если нужно одно значение, так и бери одно. если по всем nac то делай это в одном запросе с JOIN - один запрос к базе вместо нескольких.
 
Назад
Сверху