Невозможно заполнить выбор, используя хранимую процедуру в php

0
require_once "Constants.php";
require_once "database.php";
require_once "fun_class.php";
$fun_class = new fun_class();
$database = new database();
$myConnection = $database->connect_database(SERVER,USER,PASSWORD,DATABASE);

У меня это в верхней части страницы (заголовок area-, потому что у меня происходит сеанс), а затем у меня есть вторая вкладка открытия и закрытия php в том месте, где предполагается заполнение:

<select>
    <?php
    $fun_class->fillDropDownCategory($myConnection);
    ?>          
</select>

В моей fun_class.php у меня есть эта функция:

 function fillDropDownCategory($mysqli) {
        echo " 1 ";
        $display_block = "";

        //Call Stored Procedure 
        if ($result = $mysqli->query("call rb_selectCategory()")) {         
        echo " 2 ";
        //  If there are no contacts returned
            if ($result->num_rows < 1) {
            //no records
                echo " 3 ";
                $display_block .= "<p><em>Sorry, no records to select!</em>
                </p>";
            } else {   

                echo " 4 ";
            //  For each record returned populate the select list
                while ($recs = $result->fetch_object()) {
                    $id = $recs['category_id'];
                    $display_name = stripslashes($recs['name']);

                    $display_block .= "<option value=\'" . $id . "\'>" . 
                    $display_name . "</option>";
                }
            }
            //free result
            $result->free();            
            //Get the last id entered - needed for the other tables
            echo " 5 ";     
            //So you can run another stored proedure after a select
            $mysqli->next_result();
        }
        else
        {
        echo " 6 ";
        $display_block .= "<p><em>Sorry, no records to select!</em></p>";
    }
        echo " 7 ";
        return($display_block);
    }

Когда я вхожу на страницу, выбор пуст, и когда я вхожу в исходный код сайта, я вижу это:

           <select>
            1  6  7         
           </select>

Который является результатом моего отладочного эха

Моя хранимая процедура:

BEGIN
SELECT category_id, name AS name

FROM xxx.category

ORDER BY name;

END

при выполнении (в phpmyadmin) он возвращает две таблицы с именем category_id с идентификатором, а второй - именем и имеет имена категорий, которые присваиваются идентификаторам.

Я новичок в php и, вероятно, что-то не так с моей функцией, но из-за отсутствия опыта я не могу найти ошибку.

  • 0
    $result = $mysqli->query("call rb_selectCategory()"); //Call Stored Procedure if ($result = $mysqli->query("call rb_selectCategory()")) { вы делаете это дважды; это не обязательно и может быть причиной проблемы.
  • 0
    @FunkFortyNiner верно, это моя ошибка, я пытался убрать if и добавив $result = ... без него, чтобы посмотреть, сработает ли это. Забыл вынести это спасибо.
Показать ещё 7 комментариев
Теги:
stored-procedures

2 ответа

-1
Лучший ответ

Поскольку вам нужно напечатать эту строку в HTML, вам нужно использовать такие функции, как echo. В вашей функции fillDropDownCategory() вы эхом fillDropDownCategory() что-то (например, echo " 1 ";), но в конце вы возвращаете переменную.

Эта переменная не будет напечатана только потому, что она возвращается, поэтому вам нужно распечатать ее, просто сделав

<select>
    <?php
    echo $fun_class->fillDropDownCategory($myConnection);
    ?>          
</select>

Конечно, вы также должны удалить свои echo вызовы в fillDropDownCategory() чтобы избежать печати некоторых нежелательных строк в HTML.

  • 0
    Это приводит к загрузке сайта в <select> затем показывает Fatal error: Cannot use object of type stdClass as array in C:\xampp\htdocs\xxx\fun_class.php on line 46 . Строка 46 - это $id = $recs['category_id']; внутри пока цикл. Спасибо за подсказку с echo я буду помнить это в будущем!
  • 0
    Это происходит потому, что mysqli_result::fetch_object() фактически возвращает экземпляр stdClass поэтому вам нужно извлекать значения ООП (например, $recs->category_id ) или просто использовать mysqli_result::fetch_assoc() чтобы получить результат в виде ассоциативного массива.
Показать ещё 1 комментарий
0

я имел

$id = $recs['category_id'];
$display_name = stripslashes($recs['name']);

изменил его на

$id = $recs->category_id;
$display_name = stripslashes($recs->name);

Спасибо всем за попытку!

  • 0
    так почему ты принял другой ответ?
  • 0
    @FunkFortyNiner, возможно, потому что этот не содержит части о отображаемых значениях?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню