12

我知道我需要准备好的语句,因为我在一个脚本中多次调用我的数据库。

我想得到关于以下句子的具体例子

查看类型转换、验证和清理变量以及将 PDO 与准备好的语句一起使用。

我知道他所说的验证和清理变量是什么意思。但是,我不完全确定准备好的陈述。我们如何准备陈述?通过过滤器,即通过消毒?还是通过一些 PDO 层?层的定义是什么?

准备好的陈述在陈述中是什么意思?请使用具体的例子。

4

4 回答 4

8

准备好的陈述在陈述中是什么意思?

文档中:

此功能允许将重复使用的命令仅解析和计划一次,而不是每次执行。

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 文档很好地回答了以下问题:

  • 为什么使用准备好的语句?
  • 什么时候应该使用准备好的语句?
于 2009-08-07T23:19:56.717 回答
6

这意味着它将通过消除手动引用参数的需要来帮助您防止 SQL 注入攻击。

不是将变量放入 sql 中,而是使用命名或问号标记,在执行语句时将替换实际值。

PHP 手册中对PDO的定义:
“PHP 数据对象 (PDO) 扩展定义了一个轻量级、一致的接口,用于在 PHP 中访问数据库。”

请参阅有关PDOPDO::prepare的 php 手册。

带有命名标记的预准备语句示例:

<?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();
于 2009-08-08T00:02:54.400 回答
0

我们如何准备报表:

您可以一次性定义一个查询,并且可以根据需要使用不同的值多次调用它。(例如,在一个循环中)

$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

于 2009-08-07T23:11:36.593 回答
0

回复 Karim79 的回答

$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_prepareandpg_execute使 PHP 更加高效,因为您不需要考虑清理。它还可以帮助您使用 PDO。

于 2009-08-08T02:09:26.347 回答