параметризованный запрос без подготовки оператора в PHP - PullRequest
2 голосов
/ 30 апреля 2011

Есть ли API в MySQLi, PDO или в PHP, который использует параметризованный запрос, но не подготавливает его к отзыву позже?Я нашел его в ADO.NET, когда мы не вызываем .Prepare () метод SQLParameter, но я не нашел этого в PHP.

1 Ответ

0 голосов
/ 30 апреля 2011

Подготовленные операторы отправляются на сервер базы данных со значениями, отделенными от запроса.Если бы вы хотели получить пользователя с ID 1337, используя PDO , вы бы сделали это;

$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = :theUserIdToGet LIMIT 1';
$stmt = $db->prepare($sql);
$stmt->bindValue(':theUserIdToGet', 1337);
$result = $stmt->fetch();

В традиционном запросе это будет просто:

$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = ' . 1337 . ' LIMIT 1';
$stmt = $db->query($sql);
$result = $stmt->fetch();

Первый пример явно требует больше кода, однако он имеет следующие преимущества;

  • Безопасность - значения (в данном случае только одно; 1337) отправляются на сервер базы данных отдельно.Сервер базы данных безопасно проверяет эти значения на наличие плохих символов и вставляет их в запрос перед выполнением.Обратите внимание, что некоторые API запросов будут эмулировать это, но все равно обеспечивают большую безопасность.
  • Удобочитаемость - при добавлении в запрос более пары параметров он становится очень беспорядочным, если объединяются строки ("идентификатор WHERE= ". $ var1." AND ". $ var2." = 1 "и т. д.).
  • Производительность (иногда). Это правда, что подготовленные операторы значительно быстрее выполняются много раз, но на практике этоочень редко.Повышение производительности при подготовке запроса к запросу () незначительно.

Подготовленные операторы всегда следует использовать при вставке переменных в запрос из-за их разборчивости и безопасности.

Обычно PDO считается очень хорошим, я лично использую его все время.Кривая обучения мягкая, и многие учебники доступны в Интернете.Это документация здесь

...