Причины для строгого ввода параметров в PDO? - PullRequest
10 голосов
/ 26 апреля 2011

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

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

Ответы [ 2 ]

7 голосов
/ 26 апреля 2011

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

5 голосов
/ 26 апреля 2011

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

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

, поэтому он будет автоматически определять регистр LIMIT

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...