Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法回显查询的结果_Php_Sql_Class_Function_Pdo - Fatal编程技术网

Php 无法回显查询的结果

Php 无法回显查询的结果,php,sql,class,function,pdo,Php,Sql,Class,Function,Pdo,我有一个类,其中我有一个带有以下查询的函数 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(

我有一个,其中我有一个带有以下查询的函数

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”


有什么建议吗?

你不能打印那样的数组。e、 g

$arr = array(1,2,3);
echo $arr;
将输出文本
数组
,因为您正在字符串上下文中使用数组。如果要打印数组的内容,需要对其执行一些操作,例如:

echo implode(',', $arr); // prints: 1,2,3
echo "<pre>";
print_r($weight);
echo "</pre>";

请尝试以下示例:

$weight = $users->count_weight();
foreach($weight as $w)
{
   echo($w['id']):
}
$query->fetchAll()将返回一个数组。使用
var\u dump()
分析数组并相应调整变量声明

echo”“;
打印(重量);
回声“;

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

$weight是它检索到的行的数组。你需要呼应一下那篇专栏文章

$query = $this->db->prepare("SELECT sum( weight ) AS weight FROM `fish` WHERE `user_id` = '".$_SESSION['id']."'");
由于查询的原因,这可能有效,也可能无效。尝试将查询更改为:


您需要使用
foreach
对结果进行迭代。或者,由于您的查询看起来应该只返回一行和一列,而不是执行
fetchAll
do
fetchColumn
为什么不使用参数为?Mike-谢谢!fetchColumn做到了这一点。@CheesePuffs您真的应该为prepared语句使用绑定参数,以实现适当的安全性/SQL注入预防。您还应该查看
stmt::bind_param
stmt::bind_result
Daryl Gill-谢谢您的提示!我边走边学,能举个例子吗?:)实际上,使用
fetchAll
生成所有行的零索引数组,因此实际上需要执行
$weight[0]['weight']
,因为它返回所有行。如果您使用的是
fetch
,它将只返回一行,而
fetchColumn
只返回一行中的一列。这是为了检查数组是否正确填充,并且应该(主要)用作调试步骤,这不会从数组中回显元素,而是整个数组
echo $weight['weight'];
$query = $this->db->prepare("SELECT sum( weight ) AS weight FROM `fish` WHERE `user_id` = '".$_SESSION['id']."'");