Передача параметров массива и использование предложения LIMIT с PDO
При работе с запросами к базе данных может быть полезно передать массив параметров в оператор PDO с использованием предложения LIMIT. Однако это может быть сложно при использовании метода связыванияParam для установки отдельных параметров.
Дилемма
Проблема возникает потому, что предложение LIMIT требует привязки определенных числовых значений. , а метод выполнения ожидает массив именованных параметров. Эта несовместимость препятствует одновременному использованию обоих подходов.
Решение проблемы
Решение заключается в отключении настройки PDO::ATTR_EMULATE_PREPARES по умолчанию. Если этот параметр включен, PDO внутренне генерирует динамический SQL и цитирует значения, по сути, имитируя подготовленные операторы. Однако такое поведение по умолчанию мешает передаче именованных параметров.
Отключение эмулированной подготовки
При установке для PDO::ATTR_EMULATE_PREPARES значения false с помощью метода setAttribute поведение по умолчанию отключается. . Это позволяет PDO использовать фактически подготовленные операторы, обеспечивая привязку именованных параметров, при этом используя предложение LIMIT.
Пример использования
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!
Аспекты производительности
Эмулированные подготовки используются по умолчанию в MySQL для повышения производительности. Отключение эмулируемой подготовки может немного снизить производительность, но обеспечивает большую гибкость привязки параметров.
Дополнительные ресурсы
Для получения дополнительной информации по этой теме обратитесь к следующим ресурсам:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3