9

我尽量不要感到沮丧,但我最近了解到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"];
4

2 回答 2

21

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) {}
于 2012-12-26T01:17:36.673 回答
1

利用

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

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

于 2017-07-09T17:18:58.527 回答