我正在尝试将我存储在数据库中的日期列表放在一个数组中。我尝试了以下功能,但我只回到了“数组”。我不确定我做错了什么,或者是否有另一种方法来检索日期。
function getdate($id) {
$select = $this->db->query("select * from dates where user_id= '$id' ");
$result_array = array();
while($row = $select->fetch( PDO::FETCH_ASSOC )){
$result_array[] = $row['date'];
}
return $result_array;
}
答案 0 :(得分:1)
如果您期望多行,则应该是" fetchAll"。此外,如果您不需要所有内容,只需获取所需的列。
这是针对fetchAll的PHP PDO文档修改的,我假设您的用户ID是整数...
$sth = $dbh->prepare("SELECT date FROM dates WHERE user_id= :userid ");
$sth->bindValue(':userid', $id, PDO::PARAM_INT);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
print_r将显示数组的外观,以便您可以访问它,正如nogad所说。
答案 1 :(得分:1)
使用
PDO statements
时,您可以跟进PDO足够强大以避免SQL注入的过程。但是您没有在代码中跟进该过程。建议使用绑定参数。
注意:除了fetch语句之外,您的代码将运行良好。您必须fetchAll();
才能从结果查询中捕获所有数据,然后打印它。
如果是这种情况,您必须使用fetchAll();
从数据库中检索多行输出,否则为了检索单行输出,您的代码看起来会很好。
解决方案一:
您可以在函数中使用绑定参数,以避免SQL注入。
functions.php
function getdate($id)
{
$select = $conn->prepare("SELECT `date` FROM `dates` WHERE user_id= :id ");
$select->bindValue(':id', $id, PDO::PARAM_INT);
$select->execute();
$result = $select->fetchAll(PDO::FETCH_ASSOC);
return $result;
}
其他文件你可以像这样得到函数调用。
$result = getdate(3);
您必须
print_r()
$result
。这样就会产生array()
结构。
关于PDO中的fetch语句的一些更清晰的解释。
PDO有一些非常方便的方法可以以不同的格式返回查询结果:
fetch()
- 类似于mysql_fetch_array()的通用提取方法。fetchAll()
- 获取没有while循环的所有行。fetchColumn()
- 获取单个标量值而不先获取数组。示例:强>
$stmt = $pdo->prepare("SELECT id,name FROM songs WHERE dt=curdate()");
$stmt->execute();
$data = $stmt->fetchAll();
现在我们拥有了$ data数组中的所有歌曲,我们可以根据需要设置页面。
<table>
<?php foreach ($data as $row): ?>
<tr>
<td>
<a href="songs.php?<?=$row['id']?>">
<?=htmlspecialchars($row['name'])?>
</a>
</td>
</tr>
<?php endforeach ?>
</table>