【问题标题】:How to show value in php prepared statements如何在 php 准备好的语句中显示值
【发布时间】:2016-09-22 09:08:50
【问题描述】:

我有以下查询,我想打印“总数” 我想像打印“num_rows”一样打印总数 我怎样才能做到这一点 ?

$stmt = $conn->prepare("SELECT SUM( total) AS total FROM money");
            $stmt->execute();
            $stmt->store_result();
            print $stmt->total;

我的表结构是这样的

id user monthly_pay total
1  Adam  1500       1500
2  Erik 1500       1500 
3  Mark  1500      1500
4 Gusta 1500       1500
5  Mike 1500       1500

我要查看总数“75000”

【问题讨论】:

  • 你使用了聚合函数,所以每次它每次都会返回一行意味着你将得到固定的结果 1。
  • 现在在 Phpmyadmin 上它只返回 1 个结果。因为这是总计的要求
  • 你正在使用 sum() 函数返回一行,在结果集中你正在获取 num_row 所以我只会是 1
  • 您的意思是要获取一个结果吗?如果是这样,我给你答案
  • 那么在这种情况下我应该使用什么代码?

标签: php mysql


【解决方案1】:

在不处理用户输入时严格不需要使用准备好的语句,但使用它也没有缺点(如果您扩展查询以处理变量/用户输入,基础工作已经完成!) .这意味着对于这样的静态查询,您可以使用普通的query() 函数。

但是,使用这样的准备好的语句,您需要绑定结果并获取它。使用$stmt->num_rows 会欺骗你,因为这将返回查询返回的行数——它只会是 1。它不会返回结果。

下面的 sn-p 已修改为使用 bind_result()fetch()。这将准备查询,将结果绑定到$sum 并获取它。

$stmt = $conn->prepare("SELECT SUM( total) AS total FROM money");
$stmt->execute();
$stmt->bind_result($sum);
$stmt->fetch();
print "The sum is ".$sum;

参考文献

【讨论】:

  • 谢谢,这正是我想要的
【解决方案2】:

你应该使用PDO::fetch()

$stmt = $conn->prepare("SELECT SUM( total) AS total FROM money");
            $stmt->execute();
            $stmt->store_result();
            $result = $stmt->fetch(PDO::FETCH_ASSOC);
            print_r($result);

【讨论】:

  • 谢谢,但这不起作用,这应该查看总数,如“150 000”
  • 你会得到像 ['total'=> 150000] 这样的数组。所以只需输入 print_r($result['total'])
  • OP 似乎使用的是mysqli_*,而不是 PDO。 store_result();$stmt->num_rows 就是这样的迹象 ;-)
  • @Qirel 你能具体化一下,你是什么意思?有问题的原因是使用 PDO 方法,即使没有它,mysqli_* 中的所有功能也有类似物
  • @Dmytrechko 这似乎是 mysqli_,而不是 PDO - 您可以从原始问题中使用的 store_result()$stmt->num_row 看出。这些是mysqli_ 函数。
猜你喜欢
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2020-06-19
  • 2010-11-30
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多