подготовленный запрос pdo

Подготовленные запросы

Идея подготовленных запросов заключается в том, что это быстро (особенно когда большой объем информации) и более безопасно (т.к. запрос обрабатывается только один раз и никакая 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).




Добавить комментарий

Ваш e-mail не будет опубликован.