Когда вы привязываете параметры к оператору SQL, вы можете PDO::PARAM_STR
тип параметра, например PDO::PARAM_STR
. Если вы этого не сделаете, введите значения по умолчанию в PDO::PARAM_STR
. Каковы могут быть причины для конкретного задания типа каждого параметра? PDO :: PARAM_STR работает с любым параметром, как я знаю, по крайней мере, в MySQL. Я думаю, что даже с PDO :: PARAM_STR можно использовать даже с столбцами BLOB.
PDO :: PARAM_STR не вводит SQL-инъекцию, потому что у вас все еще есть подготовленные запросы.
Использование PARAM_STR
всегда работает в значениях столбцов, потому что mySQL неявно преобразует значения в правильный тип там, где он может , но в этом запросе он не будет работать:
$limit = 1; $dbh->prepare("SELECT * FROM items LIMIT :limit"); $dbh->bindParam(":limit", $limit, PDO::PARAM_STR); // Will throw "You have an error in your SQL syntax..."
следует использовать PARAM_INT
где это необходимо, для случаев, подобных приведенным выше, и готовиться к работе с базами данных, отличными от mySQL, которые могут быть более строгими в ожидаемых.
лично я не вижу причин, пока у вас есть этот атрибут:
$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
поэтому он автоматически обнаружит случай LIMIT
во всяком случае, я бы предпочел определить тип в заполнителе, а не в функции привязки.
Однако мой опыт работы с PDO не настолько силен. Я только что попробовал и решил вернуться к простому mysql.