如何使用PDO获取行

时间:2012-12-26 01:11:59

标签: php pdo

我尽量不要感到沮丧,但我最近才知道mysql_*在PHP中被折旧了。我已经决定学习如何使用PDO。我今天刚看到它,并且使用它连接到数据库很简单,但后来我想用它来获取一行并将该行保存为由列名索引的数组(与函数相同的方式) mysql_fetch_array做了。我无法弄清楚是为了挽救我的生命。我将发布我的代码以澄清,我确信它是简单的(所有编程错误总是很简单)但我肯定做错了。

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

感谢您的帮助。

亚历

2 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:0)

使用

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

您将获得第一个查询结果。