Биндинг и значения в PDO

304
11 июля 2017, 22:09

Первый вопрос по коду:

$sql = "SELECT COUNT(*) FROM `guests`";
    if ($STH = $pdo->query($sql)) {
        if ($STH->fetchColumn() > 0) {
            echo "Есть данные";
        }
        else {
            echo "Нет данных";
        }
    }

Я туплю и никак не могу понять как мне получить объект или переменную непосредственно с количеством строк, т.е. сколько их 10, 20, 30?

Второй вопрос: почему первый вариант работает, а второй где я пытаюсь биндить параметры не работает. И почему работает первый вариант ведь в нём нет $value->execute();

Первый

$value = $pdo->query("SELECT * FROM `guests` WHERE id=7 ");
if($Row = $value->fetch(PDO::FETCH_ASSOC)) {
    print_r($Row);
}

Второй

$id = 7;
$value = $pdo->query("SELECT * FROM `guests` WHERE id=:id ");
$value->bindParam(":id",$id);
if($Row = $value->fetch(PDO::FETCH_ASSOC)) {
    print_r($Row);
}
Answer 1

"Второй" вариант - это вы пытаетесь использовать подготовленный запрос. Делается это так:

$id = 7;
$stmt = $pdo->prepare("SELECT * FROM `guests` WHERE id=:id ");
$stmt->bindParam(":id", $id);
$stmt->execute();
if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    print_r($row);
}

Про количества строк. По умолчанию PDO работает с курсором в БД и до момента извлечения всех строк их количество(в большинстве случаев) неизвестно. Вы можете использовать, например, fetchAll() и работать с результирующим набором как с массивом

READ ALSO
Проблема с шифрованием XOR

Проблема с шифрованием XOR

Помогите найти ошибку в коде, текст из файла шифруется, а вот с дешифровкой проблемы

307
Наследование шаблонного класса

Наследование шаблонного класса

Есть шаблонный класс BaseMatrix Кусок заголовочного файла:

340
Обращение к элементу в векторе структур

Обращение к элементу в векторе структур

У меня есть структура Words

245