Причины сильного ввода параметров в 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.