我正在尝试从mysql数据库中获取一些数据。我正在使用PDO +预处理语句,然后将结果作为关联数组提取。数据未显示。
<?php
try {
$stmt = $conn->prepare("SELECT * FROM bestsellers");
$stmt->execute();
while ($result = $stmt->setFetchMode(PDO::FETCH_ASSOC)) {
echo '<tr class="bestseller-game-template">';
echo '<td class="col-sm-3">' . $result["title"] . '</td>';
echo '<td class="col-sm-3">' . $result["genre"] . '</td>';
echo '<td class="col-sm-3">' . $result["rating"] . '</td>';
echo '<td class="col-sm-3">' . $result["price"] . '</td>';
echo '</tr>';
}
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
答案 0 :(得分:0)
设置PDO时,在那里设置获取模式:
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);
然后使用fetch();
获取数据while($result = $stmt->fetch()){
echo ' <tr class="bestseller-game-template">';
echo '<td class="col-sm-3">'.$result["title"].'</td>';
echo '<td class="col-sm-3">'.$result["genre"].'</td>';
echo '<td class="col-sm-3">'.$result["rating"].'</td>';
echo '<td class="col-sm-3">'.$result["price"].'</td>';
echo '</tr>';
}
答案 1 :(得分:0)
您可以查看here以获取更多信息 试试这个:
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($result = $stmt->fetch()) {
echo ' <tr class="bestseller-game-template">';
echo '<td class="col-sm-3">'.$result["title"].'</td>';
echo '<td class="col-sm-3">'.$result["genre"].'</td>';
echo '<td class="col-sm-3">'.$result["rating"].'</td>';
echo '<td class="col-sm-3">'.$result["price"].'</td>';
echo '</tr>';
}
答案 2 :(得分:0)
正如其他用户已发布的那样,PDOStatement::setFetchMode
仅为预准备语句设置默认获取模式。它必须是PDO::FETCH_*
常量之一,如PDOStatement::fetch的文档中所述。
为了从db表中获取记录,您可以在fetch()
语句中调用while
,或直接调用fetchAll()
。
fetch()
方法仅用于获取一条记录。但是,通过应用while
语句,您告诉PHP引擎在每个迭代步骤中获取新记录。fetch()
相比,fetchAll()
方法旨在一次获取多个记录。 A test说,“它更快,但需要更多内存”。如果测试令你信服,由你来决定。无论如何,由于您尝试获取多条记录,我建议使用fetchAll
方法。我个人选择的理由是,这样可以避免使用while
语句。我总是试图在我的代码中完全避免while
语句,因为它们可以产生无限循环。但这并不意味着你不应该使用它们。但要小心使用它们。
现在,fetchAll()
方法的第一个参数是fetch_style
。它完全对应于setFetchMode()
的参数和fetch()
方法的第一个参数。因此,请再次详细阅读PDOStatement::fetch的参数列表,以便了解它可以采用的值。
此外,我建议您尝试将提取代码与演示代码分开。获取数组中所需的所有数据,然后照常迭代它们,以便格式化显示结果。如果可能的话,尽量避免从PHP代码构建HTML元素。
最后,这是一个非常好的PDO教程:(The only proper) PDO tutorial。
祝你好运!<?php
try {
// Connect to db.
$conn = new PDO(
'mysql:host=localhost;port=3306;dbname=books;charset=utf8'
, 'yourusername'
, 'yourpassword'
, array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_PERSISTENT => true,
)
);
// Prepare and execute query.
$sql = 'SELECT * FROM bestsellers';
$stmt = $conn->prepare($sql);
$stmt->execute();
// Get the result set as an associative array.
$bestsellers = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $exc) {
echo $exc->getMessage();
exit();
} catch (Exception $exc) {
echo $exc->getMessage();
exit();
}
?>
<table>
<?php
foreach ($bestsellers as $bestseller) {
$title = $bestseller['title'];
$genre = $bestseller['genre'];
$rating = $bestseller['rating'];
$price = $bestseller['price'];
?>
<tr class="bestseller-game-template">
<td class="col-sm-3">
<?php echo $title; ?>
</td>
<td class="col-sm-3">
<?php echo $genre; ?>
</td>
<td class="col-sm-3">
<?php echo $rating; ?>
</td>
<td class="col-sm-3">
<?php echo $price; ?>
</td>
</tr>
<?php
}
?>
</table>