Соответствует указанному заполнителю в запросе. Это не требуется для привязки, драйвер автоматически добавит его, если он отсутствует.
В вашем коде у вас есть
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
^^^^^^^^^ ^^^^^^^
Драйвер читает что-либо с :
и завершающим текстом в качестве заполнителя. Затем он заменяет это содержимое ограниченным значением, экранирует все специальные символы и заключает в кавычки строку.
Итак, ваш bindparam
имеет
:calories
и :colour
, которые соответствуют каждому из них. Допустим, у $calories
было o'brien
. Когда запрос отправляется в БД, он будет:
SELECT name, colour, calories
FROM fruit
WHERE calories < 'o\'brien'
PDO также поддерживает безымянные заполнители, которые являются просто вопросительными знаками ?
. Вы связываете их по положению.
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
и затем используйте 1
, потому что это первый заполнитель.
$sth->bindParam(1, $calories, PDO::PARAM_INT);
Кроме того, вы можете просто передать все значения в функцию execute
в виде массива, и она также выполнит привязку.
Независимо от привязки bindparam
или execute
вы должны обратиться к привязке, используя ее в запросе. Безымянный - позиционный, по имени.