Причины сильного ввода параметров в PDO?

При привязке параметров к оператору SQL вы можете указать тип параметра, например PDO::PARAM_STR. Если вы этого не сделаете, введите значения по умолчанию PDO::PARAM_STR. Каковы могут быть причины для конкретного задания типа каждого параметра? PDO:: PARAM_STR работает с любым параметром, как я знаю, по крайней мере, в MySQL. Я думаю, что даже с PDO:: PARAM_STR можно использовать даже с столбцами BLOB.

PDO:: PARAM_STR не вводит никакой SQL-инъекции, потому что у вас все еще есть подготовленные запросы.

Ответ 1

Использование 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, которые могут быть более строгими в том, что они ожидают.

Ответ 2

лично я не вижу причины, если у вас есть этот атрибут:

$dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );

поэтому он автоматически обнаружит случай LIMIT.

В любом случае, я бы предпочел определить тип в placeholder, а не в функции привязки.

Однако мой опыт работы с PDO не настолько силен. Я только что попробовал и решил вернуться к простому mysql.