我尽量不要感到沮丧,但我最近才知道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"];
感谢您的帮助。
亚历
答案 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);
您将获得第一个查询结果。