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