【问题标题】:Saving PDO-data in array将 PDO 数据保存在数组中
【发布时间】:2014-04-07 21:07:44
【问题描述】:

我正在做这个选择:

$result = $dbh->query("SELECT clicks FROM table WHERE click_date = '".$current_date."'");
    $result->execute();
    $array = array();
    while ($user = $result->fetch(PDO::FETCH_ASSOC)) {
        array_push($array, $user['clicks'].",");
    }

但这会返回:

49572940

但应该是:

4,9,5,7,2,9,4,0

谁能帮我解决这个问题?

您好!

【问题讨论】:

  • 返回49572940 的具体情况如何?它应该返回一个数组,而不是一个数字。
  • 如果这是查询返回的内容,则array_push 返回:Array ( [0] => 4, [1] => 9, [2] => 5, [3] => 7, [4] => 2, [5] => 9, [6] => 4, [7] => 0, )
  • 好的,但为什么会返回? : > 数组(1) { [0]=> 字符串(1) "4" } 数组(2) { [0]=> 字符串(1) "4" [1]=> 字符串(1) "9" }你知道怎么解决吗?
  • 如果您想从查询中返回一系列数据,请使用 fetchAll 而不是 fetch - 它会以数组数组的形式返回所有内容(如果您愿意,还可以返回更多数据)并且您这样可以避免不必要的循环 - php.net/manual/en/pdostatement.fetchall.php
  • eval.in/133456 返回它应该返回的内容!

标签: php arrays select pdo


【解决方案1】:

试试这个方法:

<?php
$sql = "SELECT clicks FROM table WHERE click_date = '$current_date'";
foreach ($dbh->query($sql) as $row) {
 $array[] = $row['clicks'];
}
//now echo and use implode
echo implode(", ", $array);
?>

因为根据PHP Manual - PDO::query:

PDO::query — 执行一条 SQL 语句,返回一个结果集作为 PDOStatement 对象

【讨论】:

    【解决方案2】:

    您应该使用fetchAll 来获取所有值,并且如果您想执行准备好的语句,您必须使用prepare 而不是query

    $sth = $dbh->prepare("SELECT clicks FROM table WHERE click_date = :current_date");
    $sth->bindParam(':current_date', $current_date);
    $sth->execute();
    $result = $sth->fetchAll();
    

    如果你想要一个用逗号分隔值的字符串,你可以按照@jason 的建议使用 implode。

    $str = implode(",", $result );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2017-07-28
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多