@Aricus

Какие типы данных использовать в bindParam в PDO?

Есть условный запрос к mysql через PDO:
$sth = $dbh->prepare('SELECT * FROM table WHERE col = :col');
$sth->bindParam(':col', $col, PDO::???);
$sth->execute();

Вопрос в том, какие константы использовать вместо ??? при типе данных Int? Вместо чисел, например, -2, 0, 2 должно подставляться следующие:
Вариант 1: -2, 0, 2
Вариант 2: 0 (или ошибка), 0, 2
Вариант 3: NULL (или ошибка), NULL, 2
При третьем варианте, будет ли при нулевом значении запрос изменяться на 'SELECT * FROM table WHERE col IS NULL' ? Ведь в противном случае запрос будет некорректен. Или, возможно, для корректного решения этой проблемы нужно где-то подготавливать данные самостоятельно?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Вопрос в том, какие константы использовать вместо ??? при типе данных Int?

Вы так спрашиваете, будто для чисел есть что-то кроме PDO::PARAM_INT
Их вообще полтора землекопа только: https://www.php.net/manual/en/pdo.constants.php

будет ли при нулевом значении запрос изменяться

Нет, не будет. Это ваша задача составить верно запрос. При том не пытайтесь сделать универсальный запрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@FanatPHP
Никакие. подставляй переменные прямо в execute()

$sth = $dbh->prepare('SELECT * FROM table WHERE col = :col');
$sth->execute(['col' => $col]);

Никогда не надо разводить писанину на пустом месте

Проблема же, которую ты соизволил озвучить в тексте вопроса, не имеет к PDO вообще никакого отношения и решается оператором космический корабль:

SELECT * FROM table WHERE col <=> :col

с ним третий вариант найдет те записи у которых значение NULL
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 160 000 ₽
ЧИТАЙ-ГОРОД Москва
от 140 000 до 210 000 ₽
ImageSpark Санкт-Петербург
от 60 000 ₽