我是PDO的新手,无法将获取结果放入数组中。
以下代码成功查询数据库。但是,我想将结果放入一个数组中,以便我可以单独使用数组的元素。我不确定下面的$result
究竟是什么。它已经是阵列吗?或者它是什么。我想我需要使用fetchAll
来获取数组。如果是这样,会很感激正确的代码来做到这一点。或者,如果下面的$results
已经是一个数组,那么我与fetchAll
之间的区别是什么?
//USE PDO TO CONNECT TO DBASE
$hostdb = "my host";
$namedb = "mydb";
$passdb = "bypass";
$userdb = "myusername";
try {
// Connect and create the PDO object
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
// Define and perform the SQL SELECT query
$sql = "SELECT * FROM `comments` WHERE `userid` IN(118)";
$result = $conn->query($sql); // THIS WORKS
// $result = $sql->fetchAll(PDO::FETCH_OBJ); //THIS DOES NOT WORK
if($result !== false) {
// Parse the result set
foreach($result as $row) {
echo $row['id']. ' - '. $row['name']. ' - '. $row['category']. ' - '. $row['link']. '<br />';
}
}
$conn = null; // Disconnect
}
catch(PDOException $e) {
echo $e->getMessage();
}
答案 0 :(得分:1)
fetchAll会将完整的结果集返回到变量中。该变量是一个数组,结果集中每一行都有一个出现。根据您在fetchAll中使用的参数,它将是行数组或行对象数组的数组。
但是你的语法中有一些小错误
// Define and perform the SQL SELECT query
$sql = "SELECT * FROM `comments` WHERE `userid` IN(118)";
$result = $conn->query($sql);
if($result !== false) {
// use $result here as that you PDO::Statement object
$allRows = $result->fetchAll(PDO::FETCH_OBJ);
// Parse the result set
foreach($allRows as $row) {
// also amend here to address the contents of the allRows i.e. $row as objects
echo $row->id. ' - '. $row->name. ' - '. $row->category. ' - '. $row->link. '<br />';
}
答案 1 :(得分:0)
首先,要确保$result
使用var_dump($result)
是什么,因为PDO::query
方法会返回PDOStatement对象。此外,在您的情况下,它不是一个数组,它是一个PDOStatement对象。请参阅http://php.net/manual/en/pdo.query.php。
之后,我建议使用PDO::prepare()
和PDO::execute()
方法来运行您的SQL查询,因为它性能友好,特别是如果您要多次运行它并且通过阻止SQL注入更安全。请参阅http://php.net/manual/en/pdo.prepare.php。
毕竟,PDO::fetchAll()
将返回结果集的数组,这是您已经想要的。请参阅PHP PDO::fetchAll()
手册。
所以我要做的是:
$sql = "SELECT * FROM `comments` WHERE `userid` IN(118)";
$statement = $conn->prepare($sql);
if($statement->execute())
{
$results = $statement->fetchAll('Your prefered fetch style');
foreach($results as $result) {
...
}
}