Возвращение значения 0 из строки базы данных в PHP / MySQL после запроса - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь создать страницу, на которой я могу получить значения записей базы данных. Мой запрос выглядит так:

Так что мне нужно получить количество значений 1 на статус (в виде счетчика) из таблицы примера, если они существуют, и подсчитать их, если они не существуют, мне нужно получить значение как 0 от него. Чтобы получить значения, я использую этот код, и он прекрасно работает, но у меня не получается получить возвращаемое значение 0 в моем коде PHP, если результаты не найдены. Я немного растерялся.

$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 ]

3 голосов
/ 02 апреля 2020

При использовании 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;

Вам не нужно писать l oop или предыдущую проверку для получения значения SUM.

1 голос
/ 02 апреля 2020

Вы делаете запрос SUM, который всегда будет иметь строку результата.

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

Возможно, вы захотите проверить SUM(count) = 0, где вы можете сделать это в своем пока l oop

while ($row = mysqli_fetch_array($request)) {
    if (!empty($row[0])) {
        echo $row[0]; // sum not 0
    } else {
        echo '0';
    }
}
0 голосов
/ 02 апреля 2020

Вы используете mysqli_fetch_array, который возвращает массив с и цифрами c и ассоциативными индексами вместо просто ассоциативного массива. Вы должны использовать mysqli_fetch_assoc или mysqli_fetch_array со вторым параметром resulttype, как указано в документации.

resulttype Этот необязательный параметр является константой, указывающей, какой тип массива должен быть производится из текущей строки данных. Возможные значения этого параметра: константы MYSQLI_ASSO C, MYSQLI_NUM или MYSQLI_BOTH.

При использовании константы MYSQLI_ASSO C эта функция будет вести себя идентично mysqli_fetch_asso c (), а MYSQLI_N ведут себя идентично функции 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...