PDO:从 MySQL 中选择行

在本教程中,我将向您展示如何使用 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>';
}

上述代码的分步指南:

  1. 我们构建了我们的 SQL SELECT 语句。请注意我们如何创建一个名为:make的占位符/参数。
  2. 我们“准备”了我们的 SELECT 语句。
  3. 变量 $make 是一个字符串,其中包含我们要从汽车表中选择的汽车品牌。
  4. 我们将 $make 变量绑定到我们的:make占位符。
  5. 我们执行了准备好的语句。正是在这个阶段,SQL SELECT 查询才真正运行。
  6. 我们使用 PDOStatement::fetchAll 函数从 PDO 语句中获取选定的表行。我们还提供了一个名为 PDO::FETCH_ASSOC 的可选参数,它告诉函数返回一个关联数组。
  7. 我们遍历我们的数据。

选择带有 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 值!

相关推荐阅读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值