【问题标题】:Cannot echo result from a query无法回显查询的结果
【发布时间】:2013-08-04 04:46:42
【问题描述】:

我有一个 class,其中我有一个 function 和以下 query

public function count_weight() {
    $id = $_SESSION['id'];
    $query = $this->db->prepare("SELECT sum( weight ) FROM `fish` WHERE `user_id` = '".$_SESSION['id']."'");

    try {
        $query->execute();
    } catch(PDOException $e) {
        die($e->getMessage());
    }

    return $query->fetchAll();
}

我想在我的索引页面上回显这个结果。现在它看起来像这样:

$weight = $users->count_weight();

回声 $weight;

这显然不起作用,它只打印出“arraykg”。

有什么建议吗?

【问题讨论】:

  • 您需要使用foreach 迭代结果。或者由于您的查询看起来应该只返回一行和一列,而不是执行 fetchAll 执行 fetchColumn
  • 为什么不使用带参数的预处理语句??
  • 迈克 - 谢谢! fetchColumn 成功了。
  • @CheesePuffs 你真的应该为准备好的语句使用绑定参数,以防止适当的安全/SQL 注入。您还应该查看stmt::bind_paramstmt::bind_result
  • Daryl Gill - 感谢您的提示!我边走边学,愿意举个例子吗? :)

标签: php sql class function pdo


【解决方案1】:

$weight 是它检索到的行的数组。您需要回显该列

echo $weight['weight'];

由于查询,这可能会或可能不会起作用。尝试将查询更改为:

$query = $this->db->prepare("SELECT sum( weight ) AS weight FROM `fish` WHERE `user_id` = '".$_SESSION['id']."'");

【讨论】:

  • 实际上使用fetchAll 会产生一个所有行的零索引数组,因此您实际上需要执行$weight[0]['weight'],因为它返回所有行。如果您使用fetch,它将只返回一行,fetchColumn 只返回一列一行。
【解决方案2】:
echo "<pre>";
print_r($weight);
echo "</pre>";

假设$weight实际上包含数据而不是资源。

【讨论】:

  • 这是为了检查数组是否正确填充,并且应该(主要)用作调试步骤,这不会从数组中回显元素,而是整个内容
【解决方案3】:

$query-&gt;fetchAll(); 将返回一个数组。使用var_dump() 分析数组并相应地调整变量声明。

【讨论】:

    【解决方案4】:

    试试这个例子:

    $weight = $users->count_weight();
    foreach($weight as $w)
    {
       echo($w['id']):
    }
    

    【讨论】:

      【解决方案5】:

      你不能打印这样的数组。例如

      $arr = array(1,2,3);
      echo $arr;
      

      将输出文字文本Array,因为您在字符串上下文中使用数组。如果你想打印数组的内容,你需要对它做一些事情,例如

      echo implode(',', $arr); // prints: 1,2,3
      

      print_r($array); // debug dump out of the array
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        相关资源
        最近更新 更多