将数据库中的日期存储在数组中

时间:2016-09-29 00:18:30

标签: php mysql pdo

我正在尝试将我存储在数据库中的日期列表放在一个数组中。我尝试了以下功能,但我只回到了“数组”。我不确定我做错了什么,或者是否有另一种方法来检索日期。

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;

}

2 个答案:

答案 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有一些非常方便的方法可以以不同的格式返回查询结果:

  1. fetch() - 类似于mysql_fetch_array()的通用提取方法。
  2. fetchAll() - 获取没有while循环的所有行。
  3. fetchColumn() - 获取单个标量值而不先获取数组。
  4. 示例:

    $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>