Идея подготовленных запросов заключается в том, что это быстро (особенно когда большой объем информации) и более безопасно (т.к. запрос обрабатывается только один раз и никакая sql-инъекция не сработает). Например, нужно перенести 100.000 записей из одной таблицы в другую. По-простому мы составим запрос SELECT * и INSERT. Каждый раз база данных будет анализировать этот запрос, и так 100.000 раз. Иначе мы используем подготовленный запрос, БД его один раз анализирует, а потом только тупо выполняет.
Подготовленные запросы мы можем применять независимо от того, поддерживает их БД или нет. Примеры подготовленных запросов:
//Первый $stmt = $dbh->prepare("SELECT * FROM users WHERE id = :id AND name = :name"); $stmt->bindParam(':id', $id, PDO:<img src="http://phpmove.ru/uploads/smiles/raspberry.gif" width="19" height="19" alt="raspberry" style="border:0;" class="smiley">ARAM_INT); $stmt->bindParam(':name', $name, PDO:<img src="http://phpmove.ru/uploads/smiles/raspberry.gif" width="19" height="19" alt="raspberry" style="border:0;" class="smiley">ARAM_STR); $stmt->execute(); //Второй $stmt = $dbh->prepare("SELECT * FROM users WHERE id = ? AND name = ?"); $stmt->bindParam(1, $id, PDO:<img src="http://phpmove.ru/uploads/smiles/raspberry.gif" width="19" height="19" alt="raspberry" style="border:0;" class="smiley">ARAM_INT); $stmt->bindParam(2, $name, PDO:<img src="http://phpmove.ru/uploads/smiles/raspberry.gif" width="19" height="19" alt="raspberry" style="border:0;" class="smiley">ARAM_STR); $stmt->execute(); //Третий $data = array('id'=>1, 'name'=>'Ivan'); $stmt = $dbh->prepare("SELECT * FROM users WHERE id = :id AND name = :name"); $stmt->bindParam(':id', $id, PDO:<img src="http://phpmove.ru/uploads/smiles/raspberry.gif" width="19" height="19" alt="raspberry" style="border:0;" class="smiley">ARAM_INT); $stmt->bindParam(':name', $name, PDO:<img src="http://phpmove.ru/uploads/smiles/raspberry.gif" width="19" height="19" alt="raspberry" style="border:0;" class="smiley">ARAM_STR); $stmt->execute($data);
Используем метод prepare, в скобках идет запрос к БД. Далее происходит привязка параметров (строки №3,4,8,9,14,15) и указывается тип приходящих данных (int, string).