如何使用 PDO 获取一行

How to fetch a row with PDO(如何使用 PDO 获取一行)
本文介绍了如何使用 PDO 获取一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我尽量不感到沮丧,但我最近了解到 mysql_* 在 PHP 中已被弃用.我决定学习如何使用 PDO.

I'm trying not to get frustrated, but I've recently learned that mysql_* is deprecated in PHP. I've decided that I would learn how to use PDO.

今天下午我刚刚在看它,使用它连接到数据库很容易,但后来我想用它获取一行并将该行保存为由列名索引的数组(同样的方式正如函数 mysql_fetch_array 所做的那样).我想不出它来挽救我的生命.

I've just been looking at it this afternoon, and connecting to the database using it was easy, but then I wanted to fetch a row with it and save the row as an array indexed by the column names (the same way as the function mysql_fetch_array did). I can't figure it out to save my life.

我会发布我的代码来澄清,我确信它很简单(所有编程错误总是很简单),但我肯定做错了什么.

I'll post my code to clarify, and I'm sure it is something simple (all programming errors are always simple), but I am definitely doing something wrong.

// Connect to the database
$host    = $_PARAM["DatabaseServer"];
$db        = $_PARAM["MainDatabase"];
$dbuser    = $_PARAM["DatabaseUser"];
$dbpass    = $_PARAM["DatabasePass"];
try
{
    $Database = new PDO("mysql:host=$host;dbname=$db", $dbuser, $dbpass);
}
catch (PDOException $e)
{
    echo "There was an unexpected error. Please try again, or contact us with concerns";
}

$stmt = $Database->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($sUserCook));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo $row["username"];

推荐答案

fetchAll 做它所说的:它获取查询的所有结果.由于它获取了大量结果,因此您将获得一个索引数组.

fetchAll does what it says: it fetches all results for a query. Since it fetches a lot of results, you'll get an indexed array.

fetch 会执行您可能正在寻找的操作:它为查询获取一个结果.如果您要将 mysql_* 代码转换为 PDO,最快的方法是使用此方法而不是 mysql_fetch_assoc.

fetch does what you might be looking for if you want only one row: it fetches one result for a query. If you're converting mysql_* code to PDO, the quickest way would be to just use this method instead of mysql_fetch_assoc.

如果您仍然使用 fetchAll:您的代码可能看起来像这样:

If you're still going with fetchAll: your code would probably just look like this:

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    echo $row['username'];
}

就像我说的,如果您只是将遗留代码转换为 PDO 代码,将所有查询更改为准备好的语句并替换以下内容可能会更容易:

Like I said, if you're just converting legacy code to PDO code, it might be easier to just change all queries to prepared statements and replace the following:

  • mysql_fetch_assoc($result)
    -> $stmt->fetch(PDO::FETCH_ASSOC)
  • mysql_num_rows($result)
    -> $stmt->rowCount()
  • while ($row = mysql_fetch_assoc($result)) {}
    -> foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}

这篇关于如何使用 PDO 获取一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)