如何使用PDO获取一行 [英] How to fetch a row with PDO

查看:68
本文介绍了如何使用PDO获取一行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图不感到沮丧,但是最近我了解到PHP不推荐使用mysql_*.我决定要学习如何使用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) {}
  • 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获取一行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆