我在这里发现了很多与 MySQL 和设计查询有关的问题,我们总是告诉他们的第一件事是“不要使用 mysql_* 函数 - 它们已被弃用”。所以我想我会添加一个在你的 PHP 程序中设置 PDO 连接的快速指南,以便我们可以在这里推荐新的 PHP 开发人员,并帮助他们的程序更安全。
那些在 PHP 和 PDO 方面的经验,请随时编辑并在必要时添加,以使其对 PDO 的初学者更有用。
第 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 - 优缺点是什么?