为了账号安全,请及时绑定邮箱和手机立即绑定

查询后从 PHP/MySQL 中的数据库行返回值 0

查询后从 PHP/MySQL 中的数据库行返回值 0

PHP
慕码人2483693 2022-12-03 18:25:18
我正在尝试创建一个页面,我可以在其中获取数据库的记录值。我的查询是这样的:所以我需要从表示例中获取状态值 1 的数量(作为计数),如果它们存在并计算它们,如果它们不存在,我需要从中获取值为 0。为了获取值,我使用了这段代码并且效果很好,但是如果没有找到结果,我似乎无法在我的 PHP 代码中返回 0 值。我有点迷路了。$user = $_SESSION["user"];$systems = mysqli_connect("localhost", "root", "", "testdatabase");$query = "SELECT SUM(count) AS value_sum FROM tableexample WHERE user = '$user' AND status = '1'";$request = mysqli_query($systems, $query);if (mysqli_num_rows($request) > 0) {    while ($row = mysqli_fetch_array($request)) {        echo '' . $row["value_sum"] . '';    }} else {    echo '0';}所以这段代码毫无问题地获取了值,但是当我放置“else”时,它应该给我值 0 但没有给我任何东西。关于如何在不改变我的代码的情况下解决这个问题的任何想法?
查看完整描述

3 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

使用 PDO 会是这样的:


$dsn = "mysql:host=localhost;dbname=myDatabase;charset=utf8mb4";


$pdo = new PDO($dsn, "username", "password", [

    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,

]);


$stmt = $pdo->prepare('

    SELECT SUM(count)

    FROM `table_example` 

    WHERE `user` = :user 

    AND `status` = "1"'

);


$stmt->bindParam(':user', $_SESSION["user"], PDO::PARAM_STR);

$stmt->execute();

$sum = $stmt->fetchColumn();

echo $sum;

您无需编写任何循环或先前的检查即可获得 SUM 值。


查看完整回答
反对 回复 2022-12-03
?
暮色呼如

TA贡献1853条经验 获得超9个赞

您正在执行一个SUM始终有结果行的查询。


SELECT SUM(count) AS value_sum FROM tableexample WHERE user = '$user' AND status = '1'


您可能想检查SUM(count) = 0您可以在 while 循环中执行的位置


while ($row = mysqli_fetch_array($request)) {

    if (!empty($row[0])) {

        echo $row[0]; // sum not 0

    } else {

        echo '0';

    }

}


查看完整回答
反对 回复 2022-12-03
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您正在使用mysqli_fetch_array它返回具有数字和关联索引的数组,而不仅仅是关联数组。您应该使用mysqli_fetch_assocor和文档中提到的mysqli_fetch_array第二个参数。resulttype


resulttype此可选参数是一个常量,指示应从当前行数据生成哪种类型的数组。此参数的可能值是常量 MYSQLI_ASSOC、MYSQLI_NUM 或 MYSQLI_BOTH。


通过使用 MYSQLI_ASSOC 常量,该函数的行为与 mysqli_fetch_assoc() 相同,而 MYSQLI_NUM 的行为与 mysqli_fetch_row() 函数相同。最后一个选项 MYSQLI_BOTH 将创建一个具有两者属性的数组。


https://www.php.net/manual/en/mysqli-result.fetch-array.php


https://www.php.net/manual/en/mysqli-result.fetch-assoc.php


根据OP的要求。 这是您的代码,但有一些更改。

<?php

$user = $_SESSION["user"];

$systems = mysqli_connect("localhost", "root", "", "testdatabase");

$query = mysqli_real_escape_string($systems, "SELECT SUM(count) AS value_sum FROM tableexample WHERE user = '$user' AND status = '1'");

$request = mysqli_query($systems, $query) or die(mysqli_error($systems)); // Added die for dev env. You can choose how you want to deal with db query error.

if (mysqli_num_rows($request) > 0) {

    // Just replaced mysqli_fetch_array with mysqli_fetch_assoc

    while ($row = mysqli_fetch_assoc($request)) {

        echo '' . $row["value_sum"] . '';

    }

} else {

    echo '0';

}

另外,正如您所了解的那样0,您似乎if (mysqli_num_rows($request) > 0)没有返回true。可能是由于数据库查询中的某些错误,您可能需要再次检查。

编辑 04-04-2020:

  1. 更新了关于indexes返回array的信息mysqli_fetch_array

  2. 添加mysqli_real_escape_string$query.


查看完整回答
反对 回复 2022-12-03
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信