Использовать подготовленные операторы PHP для Пост-ГРЭС

Только типы примитивов поддерживаются для сериализации синтаксическим анализатором конфигурации. Я использовал бы JSON или YAML для такого требования.

9
задан Community 23 May 2017 в 00:27
поделиться

4 ответа

Что означают подготовленные операторы в оператор?

Из документации :

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

См. ] pg_prepare

Пример со страницы, указанной выше:

<?php
// Connect to a database named "mary"
$dbconn = pg_connect("dbname=mary");

// Prepare a query for execution
$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM shops WHERE name = $1');

// Execute the prepared query.  Note that it is not necessary to escape
// the string "Joe's Widgets" in any way
$result = pg_execute($dbconn, "my_query", array("Joe's Widgets"));

// Execute the same prepared query, this time with a different parameter
$result = pg_execute($dbconn, "my_query", array("Clothes Clothes Clothes"));
?>

Документация MySQL для подготовленных операторов хорошо отвечает на следующие вопросы:

  • Зачем использовать подготовленные операторы?
  • Когда следует использовать подготовленные операторы операторы?
5
ответ дан 3 November 2019 в 01:02
поделиться

Это означает, что это поможет вам предотвратить атаки SQL-инъекций, исключив необходимость вручную указывать параметры в кавычках.

Вместо помещения переменной в sql вы используете именованный маркер или знак вопроса, для которого будут подставлены реальные значения при выполнении оператора.

Определение PDO из руководства PHP:
«Расширение PHP Data Objects (PDO) определяет легкий, согласованный интерфейс для доступа к базам данных в PHP.»

См. Руководство по php для PDO и PDO :: prepare .

Пример подготовленного оператора с именованными маркерами:

<?php
$pdo = new PDO('pgsql:dbname=example;user=me;password=pass;host=localhost;port=5432');

$sql = "SELECT username, password
FROM users
WHERE username = :username
AND password = :pass";

$sth = $pdo->prepare($sql);
$sth->execute(array(':username' => $_POST['username'], ':pass' => $_POST['password']));
$result = $sth->fetchAll();

Пример подготовленного оператора с вопросительными знаками:

<?php
$pdo = new PDO('pgsql:dbname=example;user=me;password=pass;host=localhost;port=5432');

$sql = "SELECT username, password
FROM users
WHERE username = ?
AND password = ?";

$sth = $pdo->prepare($sql);
$sth->execute(array($_POST['username'], $_POST['password']));
$result = $sth->fetchAll();
6
ответ дан 3 November 2019 в 01:02
поделиться

Как мы подготавливаем операторы:

Вы определяете запрос один раз и можете вызывать его сколько угодно раз с разными значениями. (например, в цикле)

$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM shops WHERE name = $1');
$result = pg_execute($dbconn, "my_query", array("Joe's Widgets"));
$result = pg_execute($dbconn, "my_query", array("row two"));
$result = pg_execute($dbconn, "my_query", array("row three"));

см .: http://us2.php.net/manual/en/function.pg-execute.php

0
ответ дан 3 November 2019 в 01:02
поделиться

Ответ на ответ Карим79

Этот

$result = pg_prepare($dbconn, "query1", 'SELECT passhash_md5 FROM users WHERE email = $1');

кажется таким же, как этот

$result = pg_prepare($dbconn, "query1", 'SELECT passhash_md5 FROM users WHERE email = ?');

Заключение: использование pg_prepare и pg_execute делает PHP намного более эффективным, так как вам не нужно думать о дезинфекции. Это также поможет вам в использовании PDO.

0
ответ дан 3 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: