Postgres için PHP ile hazırlanmış ifadeler kullanmak

4 Cevap php

Bu, "When not to use Prepared statements?" benzer bir soru, ama "nasıl yapılır" bir parçası olan ve PostgreSQL için.

Ben bir senaryo sırasında benim veritabanına birden fazla çağrı yapmak, çünkü ben hazır deyimleri ihtiyacınız olduğunu biliyoruz.

Ben following sentence ile ilgili somut örnekler almak istiyorum

Doğrulama ve sanitasyon değişkenleri ve hazırlanmış tablolar ile PDO kullanarak, tiplemeleri bak.

Ben o değişkenleri doğrulayarak ve sanitasyon demek istediğimi biliyorsun. Ancak, hazırlanan tablolar hakkında tamamen emin değilim. Biz ifadeleri nasıl hazırlanabilirim? Filtrelerle, o sterilize gereğidir? Veya bazı PDO tabakası tarafından? Tabakanın tanımı nedir?

What do prepared statements mean in the statement?, somut örnekler kullanın.

4 Cevap

What do prepared statements mean in the statement?

Kimden documentation:

Bu özellik, bunun yerine yürütülür her zaman daha, sadece bir kez ayrıştırılır ve planlı olması için tekrar tekrar kullanılacak komutları verir.

Bkz pg_prepare

Yukarıda bağlantılı sayfa örnek:

<?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 documentation for Prepared Statements güzel aşağıdaki sorulara cevaplar:

  • Neden hazır deyimleri kullanılır?
  • When should you use prepared statements?

Bu el parametreleri alıntı ihtiyacını ortadan kaldırarak, SQL enjeksiyon saldırıları önlemeye yardımcı anlamına gelir.

Bunun yerine sql içine bir değişken yerleştirerek kullandığınız adlandırılmış veya deyimi çalıştırıldığında soru işareti işaretleyici olduğu için gerçek değerler ikame edilecektir.

Definition of PDO from the PHP manual:
'The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP.'

PDO ve PDO::prepare üzerine php kılavuzuna bakın.

Adında işaretleri ile hazırlanmış bir açıklamada bir örnek:

<?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();

Soru işareti işaretleri ile hazırlanmış bir açıklamada bir örnek:

<?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();

Reply to Karim79's answer

Bu

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

Bu aynı olacak gibi görünüyor

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


pg_prepare ve pg_execute ve Conclusion: kullanımı PHP çok daha verimli, sen sterilize dikkate almak gerekmez beri yapar. Ayrıca PDO kullanımında yardımcı olur.

How do we prepare statements:

Bir sorgu bir kez tanımlamak ve sık olarak farklı değerlerle gibi denir edebilirsiniz. (Örneğin, bir döngüde)

$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"));

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