在本教程中,我将向您展示如何使用 PHP 的 PDO 对象从 MySQL 数据库中选择行。请注意,本文针对的是正在寻找某种“备忘单”的初学者。
PS:如果你是“菜鸟”,那么在使用以下任何代码之前,你需要知道如何连接到 MySQL 数据库。如果未连接到数据库,则无法从数据库中选择数据。
在上一篇教程中,我向您展示了如何使用 PDO 对象将行插入 MySQL 数据库。我还使用了一个非常简单的表结构来帮助说明我的代码示例:
CREATE TABLE IF NOT EXISTS `cars` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`make` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`model` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
使用 PDO 对象从 MySQL 中选择行有三种主要方法:
- 使用PDO::query函数——这适用于不需要外部数据(即来自客户端/用户的数据)的查询。当 SQL 注入不是问题时,您可以使用它。
- 使用PDOStatement::fetchAll函数——这适用于将返回多行的 SELECT 查询。
- 使用PDOStatement::fetch函数——这适用于一次只返回一行的 SELECT 查询。
PDO SELECT 查询。
在您的 SELECT 查询不易受到 SQL 注入影响的情况下,您可以像这样使用 PDO 查询功能:
//Selecting multiple rows from a MySQL database using the PDO::query function.
$sql = "SELECT `id`, `make`, `model` FROM `cars` ORDER BY make ASC";
foreach($pdo->query($sql, PDO::FETCH_ASSOC) as $row){
echo 'Make: ' . $row['make'] . '<br>';
echo 'Model: ' . $row['model'] . '<br>';
}
请注意,当使用外部变量时,不应使用此函数!如果您使用来自客户端的变量(例如,表单变量或 GET 变量),那么您应该使用以下方法之一。
使用 PDO 选择多行。
如果您希望使用准备好的语句从 MySQL 中选择多行,那么您可以这样做:
//Selecting multiple rows using prepared statements.
$sql = "SELECT `id`, `make`, `model` FROM `cars` WHERE `make` = :make";
//Prepare our SELECT statement.
$statement = $pdo->prepare($sql);
//The make that we are looking for.
$make = 'Nissan';
//Bind our value to the paramater :make.
$statement->bindValue(':make', $make);
//Execute our statement.
$statement->execute();
//Fetch our rows. Array (empty if no rows). False on failure.
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
//Loop through the $rows array.
foreach($rows as $row){
echo 'Make: ' . $row['make'] . '<br>';
echo 'Model: ' . $row['model'] . '<br>';
}
上述代码的分步指南:
- 我们构建了我们的 SQL SELECT 语句。请注意我们如何创建一个名为:make的占位符/参数。
- 我们“准备”了我们的 SELECT 语句。
- 变量 $make 是一个字符串,其中包含我们要从汽车表中选择的汽车品牌。
- 我们将 $make 变量绑定到我们的:make占位符。
- 我们执行了准备好的语句。正是在这个阶段,SQL SELECT 查询才真正运行。
- 我们使用 PDOStatement::fetchAll 函数从 PDO 语句中获取选定的表行。我们还提供了一个名为 PDO::FETCH_ASSOC 的可选参数,它告诉函数返回一个关联数组。
- 我们遍历我们的数据。
选择带有 PDO 对象的单行。
在此示例中,我们将使用准备好的语句从 MySQL 数据库中选择一行:
//Selecting a single row!
$sql = "SELECT `id`, `make`, `model` FROM `cars` WHERE `id` = :id";
//Prepare our SELECT statement.
$statement = $pdo->prepare($sql);
//The Primary Key of the row that we want to select.
$id = 1;
//Bind our value to the paramater :id.
$statement->bindValue(':id', $id);
//Execute our SELECT statement.
$statement->execute();
//Fetch the row.
$row = $statement->fetch(PDO::FETCH_ASSOC);
//If $row is FALSE, then no row was returned.
if($row === false){
echo $id . ' not found!';
} else{
echo 'Found: ' . $row['make'] . ' ' . $row['model'];
}
如您所见,此代码片段与我们在上面示例中使用的“Fetch All”语句非常相似。但是,这一次,我们不是使用“fetch all”来选择多行,而是使用“fetch”来选择一行。请注意,如果没有找到值,此函数将返回布尔 FALSE 值!
相关推荐阅读: