1

我在这里发现了很多与 MySQL 和设计查询有关的问题,我们总是告诉他们的第一件事是“不要使用 mysql_* 函数 - 它们已被弃用”。所以我想我会添加一个在你的 PHP 程序中设置 PDO 连接的快速指南,以便我们可以在这里推荐新的 PHP 开发人员,并帮助他们的程序更安全。

那些在 PHP 和 PDO 方面的经验,请随时编辑并在必要时添加,以使其对 PDO 的初学者更有用。

4

1 回答 1

4

第 1 步: 设置新的 PDO 连接

这并不像有时想象的那么难。首先,您可以找到那些 mysql_connect/mysql_select_db 并用以下代码替换它们:

//Obviously, replace these with your own values
$host = 'host_name';
$dbname = 'database_name';
$user = 'user_name';
$pass = 'user_pass';
try
{
    $DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
}
catch(PDOException $e)
{  
    echo $e->getMessage();  
}

这将创建您的 PDO 对象,该对象具有 mysql_* 调用的所有相同功能,然后是一些。

第 2 步: 提交查询

一旦你有了你的 PDO 对象,你就可以开始使用它来查询你的数据库。我们将首先看一个基本的选择查询,因为我们将使用的技术在大多数查询类型中都是相似的。现在,您可以直接查询,但这会带走 PDO 的一些功能。相反,我们可以使用准备好的语句。通过这样做,PDO 将为我们防止注入甚至意外的查询破坏。这是一个例子:

$query = "SELECT * FROM table_name WHERE col1=':value1' AND col2=':value2'";
$statement = $DB->prepare($query);
$statement->execute(array(':value1' => 1, ':value2' => 2));

此时,我们已经查询了数据库,并且有一个包含结果的语句对象。这里的好处是,代替执行语句中的 1 或 2,我们可以使用用户生成的值,甚至无需检查 SQL 注入尝试,因为 PDO 会捕获它们并自动修复它们。(尽管如此,您仍然应该在使用用户生成的值之前检查它们是否存在。)

第 3 步: 检索结果

现在,我们需要获取我们正在搜索的数据,以便我们可以使用它。使用 PDO 非常简单,您只需要调用 fetch 命令,就像您之前使用mysql_fetch_array()命令一样。您还需要将它包含在 while 循环中以检索所有结果,因为它的行为几乎与mysql_fetch_array()相同。

//You can use several options in fetch, to determine what kind of results you get.
//PDO::FETCH_ASSOC -> gives you column names as the array indices
//PDO::FETCH_NUM   -> Gives you the column number as the indices
// By default, it uses PDO::FETCH_BOTH which does both.
while($row = $statement->fetch(PDO::FETCH_ASSOC))
{
     echo "Col1: " . $row['col1'] . "<br />";
     echo "Col2: " . $row['col2'] . "<br />";
     echo "Col3: " . $row['col3'] . "<br />";
     echo "Col4: " . $row['col4'];
}

显然,这是一个非常简单的布局,但是您可以看到它是如何工作的,并且可以根据您的需要对其进行修改。这与您当前的 mysql_* 代码完全相同,只是它以更简单更安全的方式进行。

第 4 步: 可能性

从这里,您可以看到如何替换您的基本 mysql_* 函数。您也可以用 PDO 调用替换所有其他 mysql 函数,例如:

mysql_num_rows() == $statement->rowCount()(在你执行查询后使用) mysql_real_escape_string() ==你甚至不再需要这个了!
mysql_insert_id() == $statement->lastinsertid()

PHP 的 PDO 使用的权威指南可以在这里找到:http:
//us3.php.net/manual/en/book.pdo.php

这是一个关于 mysqli 与 PDO 优缺点的问题:
mysqli 或 PDO - 优缺点是什么?

于 2012-10-31T18:49:16.337 回答