За последние 24 часа нас посетили 51317 программистов и 1758 роботов. Сейчас ищут 890 программистов ...

Как поймать пустой результат в запросе

Тема в разделе "PHP для новичков", создана пользователем Искандар, 25 дек 2018.

  1. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    PHP:
    1. $result=mysql_query("SELECT date FROM table WHERE date='2018-12-25' GROUP BY date");
    2. while($row=mysql_fetch_array($result)):
    3. if(isset($row2['ruz'])){ echo ('не пусто');} else { echo ('пусто');}
    4. endwhile;
    Если в базе есть дата 2018-12-25 то echo показывает 'не пусто'...
    Если в базе нету дата 2018-12-25 то echo не чего не показывает...
    Помогите пожалуйста!
    Спасибо!
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    if ($result) {
    if ($result->num_rows){
    echo 'Не пусто';
    } else {
    echo 'Пусто';
    }
    } else {
    echo 'Ошибка подключения';
    }
     
  3. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    А в чем собственно вопрос? Сложилось такое впечатление что ты просто описал то условие, которое у тебя должно выполниться и оно написано.
    И как бы mysql_query уже устарел mysqli или PDO
     
  4. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    Спасибо за оперативность, но не работает(
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Искандар, расскажи, что должен возвращать запрос и для чего это. Узнать наличие даты в бд ради самого узнавания наличия как-то непонятно. Да ещё и группировка слегка вымораживает в данном контексте. Может там сортировка нужна, хотя и она там не пришей кобыле хвост.
     
  6. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    Если в базе нету дата 2018-12-25 то echo должно показать 'пусто'
     
  7. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @Искандар неужели не работает? o_O
    PHP:
    1. $result = mysqli_query("SELECT date FROM table WHERE date='2018-12-25'");
    2. if($result) {
    3.         if ($result->num_rows){
    4.              echo 'Не пусто';
    5.         } else {
    6.             echo 'Пусто';
    7.        }
    8. } else {
    9.        echo 'Ошибка подключения';
    10. }
     
  8. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    попробую объяснить:
    у меня на странице показывает таблицу с условием даты.
    допустим я выбираю дату '2018-12-25', если в базе есть данные по этим датам, то показывает в таблицу...
    Если нет такая дата, автоматом записывает данные из другой таблицы...
    И потом показывает таблицу с этим датом...
    Надеюсь я смог объяснить)
     
  9. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Вся задача решается на уровне СУРБД. Хотя и непонятно зачем две таблицы и пляски с бубном. Позже напишу запрос.
     
  10. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @Искандар чую ты дату не правильно указываешь, напиши ка:
    PHP:
    1. $result = mysqli_query("SELECT date FROM table WHERE Month(Date) = Month('2018-12-25')");
    2. if($result) {
    3.         if ($result->num_rows){
    4.              echo 'Не пусто';
    5.         } else {
    6.             echo 'Пусто';
    7.        }
    8. } else {
    9.        echo 'Ошибка подключения';
    10. }
    --- Добавлено ---
    И странно что ты тащишь только дату из таблицы, а покажи ка структуру твоих таблиц =)
     
  11. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Получается своего рода синхронизация таблиц или слияние, но при условии, что если к этой дате не обратились, то и хрен с ней, а если обратились, но ее в основной таблицы нет, то значит следует ее подтянуть. Я это как-то так понимаю.
    И проблема скорее всего именно в этом моменте:

    По сути ты переносишь данные из таблицы в таблицу и на этом всё, но ведь нужно теперь повторно сделать запрос к уже перенесенным данным либо работать с переносимыми данными, В любом случае, если тех данных в главной таблице нет, тебе нужен другой запрос к другой таблице.
    В любом случае, если я не ошибаюсь, как уже писали выше, это все можно сделать на уровне БД.
     
  12. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    HTML:
    1. <?php
    2. include "bd_connect.php";
    3. $ruz = $_GET['ruz'];
    4. $result=mysql_query("SELECT * FROM seh WHERE ruz='$ruz'");
    5. $result2 = mysql_query("SELECT ruz FROM seh WHERE ruz='$ruz'");
    6. if($result2) {
    7.        if ($result2->num_rows){
    8.              echo 'Не пусто';
    9.         } else {
    10.             echo 'Пусто';
    11.        }
    12. } else {
    13.        echo 'Ошибка подключения';
    14. }
    15. //$query = "INSERT INTO seh (ruz, nomi_mahsulot, prihod, rashod) SELECT '$ruz', nomi_mahsulot, 0, 0 FROM sklad_nomgui_mahsulot";
    16. //var_dump($query);
    17. //$res = mysql_query($query);
    18. ?>
    19. <!DOCTYPE html>
    20. <meta charset="UTF-8">
    21. </head>
    22. <form method="POST">
    23. <tr>
    24. <?php while($row=mysql_fetch_array($result)):?>
    25. <td><?php echo $row[2];?></td>
    26. <td><input type="number" name="prihod[]" value="<?php echo $row[3];?>"/></td>
    27. <td><input type="number" name="rashod[]" value="<?php echo $row[4];?>"/></td>
    28. </tr>
    29. <?php endwhile;?>
    30. </form>
    31. </body>
    32. </html>
     
  13. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    Разрешите выложить другой код. Суть тот же.
    HTML:
    1. <?php
    2. include "bd_connect.php";
    3. $ruz = $_POST['ruz'];
    4. if ( $ruz == '' ) $ruz = date('Y-m-d');
    5. $result=mysql_query("SELECT ruz FROM seh WHERE ruz='$ruz'");
    6. ?>
    7. <!DOCTYPE html>
    8. <meta charset="UTF-8">
    9. </head>
    10. <form method="POST">
    11. <input type="date" name="ruz" required value=<?php echo $ruz;?> onChange="document.forms[0].submit()"><hr>
    12. <tr>
    13. <?php while($row=mysql_fetch_array($result)):?>
    14. <td><?php echo $row[0];?></td>
    15. </tr>
    16. <?php endwhile;?>
    17. </form>
    18. </body>
    19. </html>
    20.  
    Через input выбираю разные даты, если в базе есть табличка показывает. Всё верно.
    Если в базе нету данные с такими датами как сделать чтобы автоматом записывалась в базу и сразу вставить в таблицу?
     
  14. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
  15. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
  16. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    ))))
    Можете помочь по вопросу #13?
     
  17. Artur_hopf

    Artur_hopf Старожил

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    как то так
    PHP:
    1. $ruz = date('Y-m-d');
    2. $result = mysqli_query("SELECT date FROM table WHERE ruz = '".$ruz."'");
    3. if($result) {
    4.         if ($result->num_rows){
    5.              echo 'Не пусто';
    6.         } else {
    7.             mysqli_query("INSERT INTO table (ruz) VALUES ('".$ruz."')");
    8.        }
    9. } else {
    10.        echo 'Ошибка подключения';
    11. }
     
  18. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    Нет, не правильно работает. постоянно срабатывает строка 13(((. (хот дата совпадает, хот нет, всё равно записывает данные...)
    Мне нужно если в базе есть такая дата, то не записываем.
     
  19. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Искандар, в бд дата правильно хранится? Или там тип поля varchar?
     
  20. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    PHP:
    1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    2. SET AUTOCOMMIT = 0;
    3. START TRANSACTION;
    4. SET time_zone = "+00:00";
    5. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    6. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    7. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    8. /*!40101 SET NAMES utf8mb4 */;
    9. --
    10. -- База данных: `test`
    11. --
    12. -- --------------------------------------------------------
    13. --
    14. -- Структура таблицы `first`
    15. --
    16. CREATE TABLE `first` (
    17.   `f_id` int(11) NOT NULL,
    18.   `f_date` date NOT NULL,
    19.   `f_data` varchar(30) DEFAULT NULL
    20. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    21. --
    22. -- Дамп данных таблицы `first`
    23. --
    24. INSERT INTO `first` (`f_id`, `f_date`, `f_data`) VALUES
    25. (1, '2018-12-23', 'запись существует'),
    26. (2, '2018-12-24', NULL);
    27. --
    28. -- Индексы сохранённых таблиц
    29. --
    30. --
    31. -- Индексы таблицы `first`
    32. --
    33. ALTER TABLE `first`
    34.   ADD PRIMARY KEY (`f_id`);
    35. --
    36. -- AUTO_INCREMENT для сохранённых таблиц
    37. --
    38. --
    39. -- AUTO_INCREMENT для таблицы `first`
    40. --
    41. ALTER TABLE `first`
    42.   MODIFY `f_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
    43. COMMIT;

    PHP:
    1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    2. SET AUTOCOMMIT = 0;
    3. START TRANSACTION;
    4. SET time_zone = "+00:00";
    5.  
    6.  
    7. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    8. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    9. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    10. /*!40101 SET NAMES utf8mb4 */;
    11.  
    12. --
    13. -- База данных: `test`
    14. --
    15.  
    16. -- --------------------------------------------------------
    17.  
    18. --
    19. -- Структура таблицы `second`
    20. --
    21.  
    22. CREATE TABLE `second` (
    23.   `s_id` int(11) NOT NULL,
    24.   `s_date` date NOT NULL,
    25.   `s_data` varchar(30) DEFAULT NULL
    26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    27.  
    28. --
    29. -- Дамп данных таблицы `second`
    30. --
    31.  
    32. INSERT INTO `second` (`s_id`, `s_date`, `s_data`) VALUES
    33. (1, '2018-12-24', 'тоже не пусто');
    34.  
    35. --
    36. -- Индексы сохранённых таблиц
    37. --
    38.  
    39. --
    40. -- Индексы таблицы `second`
    41. --
    42. ALTER TABLE `second`
    43.   ADD PRIMARY KEY (`s_id`);
    44.  
    45. --
    46. -- AUTO_INCREMENT для сохранённых таблиц
    47. --
    48.  
    49. --
    50. -- AUTO_INCREMENT для таблицы `second`
    51. --
    52. ALTER TABLE `second`
    53.   MODIFY `s_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
    54. COMMIT;

    Вот таким запросом можно решить задачу ничего не перезаписывая:
    PHP:
    1. SELECT IFNULL(`f_data`,(
    2.         SELECT `s_data`
    3.             FROM `second`
    4.             WHERE `s_date`='2018-12-24'
    5.             LIMIT 1)) AS `data`
    6.     FROM `first`
    7.     WHERE `f_date`='2018-12-24'
    Это не готовое решение задачи, это всего лишь пример.
     
    #20 Valick, 25 дек 2018
    Последнее редактирование: 26 дек 2018
  21. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Пример выше требует наличия даты в первой таблице, даже если поле с данными NULL иначе до вложенного запроса дело не дойдёт.
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Пишу для всех пустота в php определяется стандартнйо функцией empty
     
    SamyRed нравится это.
  23. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Походу ТС слинял...
    значит напишу на всякий случай, хотя в данном контексте задача достаточно странная
    если вторая таблица выступает в качестве буфера, то обрабатывать её нужно целиком, а не дёргать по строке
    Пример запроса который выбирает из второй таблицы дату если ёё нет в первой таблице,
    и который можно использовать в качестве вложенного:
    PHP:
    1. SELECT *
    2.     FROM `second`
    3.     WHERE `s_date` = '2018-12-24'
    4.         AND NOT EXISTS (
    5.             SELECT *
    6.                 FROM `first`
    7.                 WHERE `f_date` = '2018-12-24')
     
  24. Искандар

    Искандар Активный пользователь

    С нами с:
    18 фев 2017
    Сообщения:
    78
    Симпатии:
    6
    Добрый ночи!
    Я очень извиняюсь, по ходу я не правильно объяснил (

    PHP:
    1. $result = mysql_query("SELECT ruz FROM seh WHERE ruz = '$ruz' limit 1");
    2. while($row=mysql_fetch_array($result)):
    3. $a = $row[0];
    4. if(empty($a)) {
    5.     echo 'пусто';
    6. }
    7. else {
    8.     echo 'не пусто';
    9. }
    10. endwhile;
    Когда переменные $a совпадает с данными БД, тогда всё ок. То есть echo показывает "не пусто".
    Если $a не совпадает с данными БД, нечего не происходить. Мне нужно если не совпадает, echo должно показать "пусто".
    Вот всё что я хочу. всю голову сломал. Пе пойму как это делать?
    Я не силён в PHP.
    Простите что я мучаю Вас. Но я надеюсь на Вашу помощь.
    Спасибо!
     
  25. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар