Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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/MySQL中的数据库行返回值0_Php_Mysql_Pdo - Fatal编程技术网

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

查询后从PHP/MySQL中的数据库行返回值0,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试创建一个页面,从中可以获取数据库的记录值。我的问题是这样的: 因此,我需要从tableexample中获取状态为1的值的数量(作为计数),如果它们存在,则对它们进行计数;如果它们不存在,则需要从中获取值0。为了获得这些值,我使用了这段代码,它工作得很好,但是如果没有找到结果,我的PHP代码中的值似乎不能返回0。我有点迷路了 $user = $_SESSION["user"]; $systems = mysqli_connect("localhost", "root", "", "tes

我正在尝试创建一个页面,从中可以获取数据库的记录值。我的问题是这样的:

因此,我需要从tableexample中获取状态为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,但没有给我任何东西


你知道我如何在不改变代码的情况下解决这个问题吗?

你使用的是
mysqli\u fetch\u array
,它返回带有数字和关联索引的数组,而不仅仅是关联数组。您应该使用文档中提到的带有第二个参数的
mysqli\u fetch\u assoc
mysqli\u fetch\u数组

resulttype此可选参数是一个常量,指示应从当前行数据生成何种类型的数组。这个 此参数的可能值为常数MYSQLI_ASSOC, MYSQLI_NUM或MYSQLI_两者

通过使用MYSQLI_ASSOC常量,此函数将起作用 与mysqli_fetch_assoc()相同,而mysqli_NUM的行为 与mysqli_fetch_row()函数相同。最后的选择 MYSQLI_都将创建一个具有这两个属性的数组

根据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';
}

使用PDO会是这样的:

$dsn=“mysql:host=localhost;dbname=myDatabase;charset=utf8mb4”;
$pdo=新pdo($dsn,“用户名”,“密码”[
PDO::ATTR_ERRMODE=>PDO::ERRMODE_异常,
]);
$stmt=$pdo->准备
选择总和(计数)
从`表_示例`
其中`user`=:user
和`状态`=“1”'
);
$stmt->bindParam(':user',$\u SESSION[“user”],PDO::PARAM\u STR);
$stmt->execute();
$sum=$stmt->fetchColumn();
echo$sum;

您不需要编写任何循环或上一次检查来获取总和值。

您正在执行一个
SUM
查询,该查询将始终有一个结果行

从表中选择SUM(count)作为值\u SUM示例,其中user='$user'和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';
    }
}

不要在查询中直接使用外部的值。否则,您将面临SQL注入。@Chemaclass抱歉,由于某些原因,我需要添加代码更新,因为显示不正确。顺便说一句,谢谢你的建议。这段代码在本地主机上测试后返回空白。然而,看起来非常直接和简单,但是如果查询结果不存在,我如何添加值呢?即使
0
是一个不表示任何内容的数字,但查询将始终返回一个数字。至少有一个,因为您选择的是某些内容的总和,或者我在这里遗漏了某些内容?我理解这一点,但在对您的代码进行直接测试后,我没有从代码中获得任何输出..:(什么是完全空白的?日志文件说了什么?如果
var_dump($row),你会得到什么;
?如果表为空,我对您的代码没有任何结果,应该显示0,但我什么也没有得到,错误日志上也没有任何内容mmmm我得到的是空的或空的输出..可能是我的本地主机吗?更新了答案,如果您没有任何选择行,它将是
null
。演示非常感谢您,这真的很有帮助,一个问题n如何在循环中求和(计数)=0?在我的查询中?你能给我一个使用我的代码的示例吗?谢谢你的代码工作得很好,但是在查询后它不会在返回时显示0,但是它确实工作,但是如果没有找到结果,我将不会得到任何返回
mysqli_fetch_array()
返回关联数组。在代码中使用
die(mysqli_error($conn));
是一个非常糟糕的主意,因为它可能会泄漏敏感信息。有关更多解释,请参阅本文:@umairkan没有必要重复这项工作,编写两个版本的代码,一个用于开发环境,另一个用于生产环境。