PHP: запрос Sql возвращает true, но имеет 0 столбцов

Итак, у меня есть одна функция на PHP с двумя sql-запросами, проблема в том, что вторая не работает, и я не знаю почему.

<?php
     include('../dbFunctions.php');
     function getName($id) {
        $connection = connectDB();

        $sql = mysqli_prepare($connection, "SELECT * FROM lugar_concreto WHERE idLugar = ?");
        mysqli_stmt_bind_param($sql, "s", $id);

        $query = $sql->execute();

        if (!$query)
                die();

        $result = $sql->store_result();

        $realresult = $sql->bind_result($id, $param1, $param2, $param3);

        $sql->fetch();

        if ($sql->num_rows() == 0) {
            $sql2 = mysqli_prepare($connection, "SELECT * FROM lugar_transporte WHERE idLugarTte = ?");
            mysqli_stmt_bind_param($sql2, "s", $id);

            $query2 = $sql2->execute();

            if (!$query2)
                    die();

            $result2 = $sql2->store_result();

            $realresult2 = $sql2->bind_result($id, $param1, $param2, $param3);

            $sql2->fetch();

            $rawdata = array();
            $correct = $query2;
            $rawdata['param1'] = utf8_encode($param1);
            if (utf8_encode($param2) != null)
                    $rawdata['param2'] = utf8_encode($param2);
            $rawdata['param3'] = utf8_encode($param3);
            $rawdata['correct'] = $correct;

        } else {

            $rawdata = array();
            $correct = $query;
            $rawdata['param1'] = utf8_encode($param1);
            $rawdata['param2'] = utf8_encode($param2);
            $rawdata['param3'] = utf8_encode($param3);
            $rawdata['correct'] = $correct;
        }

        disconnectDB($connection);
        return $rawdata;

        }
?>

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

Проблема в том, что я использовал var_dump() с переменными внутри большого if, как $query, $result, $realresult и все они возвращали bool(true), но после $sql->fetch(); переменная $sql имеет 0 num_rows, я не знаю почему.

Я использую php 5, я не знаю, связано ли это с этим.

Если кто-то из вас знает, как это сделать лучше, скажите мне, любая помощь будет оценена!

Обновлено: так выглядит var $sql2 с var_dump():

PHP: запрос Sql возвращает true, но имеет 0 столбцов

Примечание. Объектно-ориентированный интерфейс mysqli значительно менее подробен, что упрощает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсом mysql_query. Прежде чем вы слишком увлечетесь процедурным стилем, стоит переключиться на него. Пример: $db = new mysqli(…) и $db->prepare("…"). Процедурный интерфейс является артефактом эпохи PHP 4, когда был представлен API mysqli, и его не следует использовать в новом коде.

tadman 01.05.2018 22:27

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

Patrick Q 01.05.2018 22:33

Ваш заголовок не соответствует задаче. Ваша проблема связана с num_rows из первого запроса, а не из второго.

Barmar 01.05.2018 22:49

Нет, первый запрос работает нормально, и num_rows тоже, проблема во втором запросе, в котором 0 столбцов, я видел это с var_dump($sql) внутри if

DavidZam 01.05.2018 22:51

@DavidZam num_rows() - это функция нет. Вы можете проверить это, передав идентификатор, который должен создать строку из первого запроса. Вы обнаружите, что по-прежнему попадает внутрь if, даже если там нет 0 строк.

Patrick Q 01.05.2018 22:58

@PatrickQ, вы правы, я удалил (), но второй запрос все еще вернул 0 столбцов, я не знаю почему

DavidZam 01.05.2018 23:13

Я предлагаю вам не использовать повторно имена переменных, как вы. Я не уверен, как библиотека mysqli обрабатывает bind_result(), когда не возвращаются строки, но я бы сказал, что есть хороший шанс, что для $id установлено какое-то ложное значение (FALSE, NULL, '' и т. д.). Таким образом, вместо того, чтобы быть значением, переданным в функцию (что, вероятно, вы ожидаете), оно вполне может быть уничтожено.

Patrick Q 01.05.2018 23:17

Я изменил имя переменных для bind_result() и все еще не работает ... Я добавил изображение с содержимым переменной $sql2, поэтому я знаю, что у него 0 строк.

DavidZam 01.05.2018 23:21

Я говорю о том, что вы делаете $realresult = $sql->bind_result($id, $param1, $param2, $param3);, а затем mysqli_stmt_bind_param($sql2, "s", $id);. Если вы изменили любой из них, пожалуйста, обновите свой код выше, чтобы отразить это.

Patrick Q 01.05.2018 23:23

ЭТО БЫЛА ПРОБЛЕМА! Я ЛЮБЛЮ ТЕБЯ ЧУВАК! @PatrickQ, большое спасибо! Я исправил сохранение $id во временной переменной и использование его во втором методе mysqli_stmt_bind_param(), спасибо !!

DavidZam 01.05.2018 23:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
46
0

Другие вопросы по теме