【问题标题】:How to fetch a row with PDO如何使用 PDO 获取一行
【发布时间】:2012-12-11 16:30:59
【问题描述】:

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

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

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

// 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"];

【问题讨论】:

  • 你能看到这里的语法高亮吗?你收到错误信息了吗?如果没有,您是否启用了 error_reporting?
  • 这里的prepare() 行缺少一些引号,但您可能知道。
  • 当您没有收到错误消息来帮助您指导时,编程是令人沮丧的。您需要配置 php 以显示错误。
  • 你们是对的,那里的错误告诉我我缺少报价,但我在任何地方都找不到。谢谢你为我找到它。我告诉你,最简单的事情总是能吸引你。

标签: php pdo


【解决方案1】:

fetchAll 言行一致:获取查询的所有结果。由于它会获取大量结果,因此您将获得一个索引数组。

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

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

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

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

  • 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) {}

【讨论】:

  • 有道理,感谢您的快速回复,我会采纳您的建议。我更改了代码,但没有给我错误致命错误:在线 \xxxx.php 中调用未定义方法 Database::prepare()。为什么它告诉我它是未定义的?谢谢
  • 我猜你的“数据库”类不是 PDO 对象,这就是为什么你不能对其进行prepare()。
【解决方案2】:

使用

$row = $stmt->fetch(PDO::FETCH_ASSOC);

你会得到第一个查询结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 2012-08-23
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多