leni_m
@leni_m
ЧупаКобрус

Как правильно написать запрос?

есть код:
$result = $db->query("SELECT * FROM table");
$i = 0;
while ($row = $result->fetch()) {
        $i++;
    }
    echo $i;

и он работает, выводит кол-во строк из таблицы.
Но вот модернизировать под свои нужды не получается:
$query ="SELECT * FROM table WHERE code LIKE '%:search%' OR code_description LIKE '%:search%';";
    $result = $db->prepare($query);
    $result->bindParam(':search', $search, PDO::PARAM_STR);
    $result->execute();
    $result->setFetchMode(PDO::FETCH_ASSOC);
$i = 0;
while ($row = $result->fetch()) {
        $i++;
    }
    echo $i;

Всегда выводит 0, хотя из консоли phpAdmin данный запрос успешно возвращает какие-то данные.
Мб слеши какие-то дописать в запрос надо?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 3
DevMan
@DevMan
кто учил так получать кол–во строк?
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Во-первых, кавычки в SQL ограничивают строки. плейсхолдер - это не строка.
Во-вторых, по умолчанию плейсхолдер с одним и тем же именем работать не будет.
В-третьих, если нужно получить только количество строк, то его надо сразу запрашивать из датабазы
В-четвертых, все это можно написать в миллион раз короче.
// Если нужно только количество
    $query ="SELECT count(*) FROM table WHERE code LIKE ? OR code_description LIKE ?";
    $stmt = $db->prepare($query);
    $stmt->execute(["%$search%","%$search%"]);
    $count = $stmt->fetchColumn();
     echo $count;
 
   // Если нужны сами данные
    $query ="SELECT * FROM table WHERE code LIKE ? OR code_description LIKE ?";
    $stmt = $db->prepare($query);
    $stmt->execute(["%$search%","%$search%"]);
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    var_dump($result);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы