Условная ошибка в проекте Codeigniter - PullRequest
0 голосов
/ 24 ноября 2018

В настоящее время я работаю над приложением по управлению запасами.Это основано на структуре Codeigniter.Основная операция приложения заключается в управлении «покупками» и «проблемами», как и в любом из этих типов приложений.

02) order_status, тот же столбец используется для записи статуса «покупок» и «проблем» в таблице MySQL.Столбец & с именем «supplier» записывает значения supplier_id и employee_id.

03) Функция, которую я использовал в модели, выглядит следующим образом:

function issueDetailReport($id,$start,$end){
        $this->db->select('store_update_stock_details.item,
        CASE store_update_stock.order_status
        WHEN "purchase" THEN tbl_supplier.supplier_name
        WHEN "issue" THEN store_officer.officer_name
        END AS supplier, *');

        $this->db->from('store_update_stock');
        $this->db->join('store_update_stock_details','store_update_stock.update_stock_id=store_update_stock_details.update_stock_id');      
        $this->db->join('store_officer','store_update_stock.supplier=store_officer.officer_id ');       
        $this->db->join('tbl_supplier','store_update_stock.supplier=tbl_supplier.supplier_id ');        
        $this->db->join('store_item','store_update_stock_details.item=store_item.item_id', 'inner');
        $this->db->where("store_update_stock.status='1' and store_item.item_id=$id");
        if($start!=NULL && $end!=NULL)
        $this->db->where("store_update_stock.billed_date BETWEEN '$start' AND '$end'");     
        $this->db->order_by('store_update_stock.purchased_date','DESC');
        $q=$this->db->get();
        if($q->num_rows()>0){
            return $q->result();
        }
        return false;
    } 

04) И отображается следующим образом:

<div class="row" style="margin-top: 2%">
        <div class="col-xs-12 table-responsive">
            <table class="table table-striped">
                <thead>
                <tr>
                    <th>In Num</th>                   
                    <th class="text-left">Received / Issued </th>
                    <th class="text-left">Date</th>
                    <th class="text-right">Amount</th>
                    <th class="text-right">Unit Price</th>
                    <th class="text-right">Sub Total</th>

                </tr>
                </thead>
                <tbody>
                <?php
                $sub_total=0;
                $total=0;
                $no=1;
                $totalqty=0;
                if(!empty($issueDetail)){
                    foreach ($issueDetail as $rows){
                        $sub_total=(-1)*$rows->qty*$rows->unit_price;
                        $total=$total+$sub_total;
                        $qty_sub_total=(-1)*$rows->qty;
                        $totalqty=$totalqty+$qty_sub_total;
                ?>
                    <tr>
                        <td><?=$no++?></td>             
                        <td class="text-left"><?=$rows->supplier_name / officer_name?></td>                 

                        <td class="text-left"><?=$rows->purchased_date?></td>                       
                        <td class="text-right"><?=(-1)*$rows->qty?></td>                                
                        <td class="text-right"><?=$rows->unit_price?></td>
                        <td class="text-right"><?=number_format($sub_total,2)?></td>

                    </tr>
                <?php

                    }
                ?>

                    <tr>
                        <th colspan="1" class="text-left">Total </th>
                        <th></th>
                        <th></th>
                        <th class="text-right" > <?=$totalqty?></th>
                        <th></th>

                        <th class="text-right" > <?=number_format($total,2)?></th>
                    </tr>
                <?php
                }
                ?>

                </tbody>

            </table>

        </div>
        <!-- /.col -->
    </div>

05) При выполнении просмотра возникла следующая ошибка:

Произошла ошибка базы данных Номер ошибки: 1064

В синтаксисе SQL имеется ошибка;проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с '. officer_name END AS supplier ИЗ store_update_stock ПРИСОЕДИНЯЙТЕСЬ к `store_update_stoc' в строке 1

SELECT store_update_stock_details. item, CASE store_update_stock. order_status WHEN "purchase" THEN tbl_supplier. supplier_name WHEN "issue" THEN store_officer. officer_name END, FALSE ОТ store_update_stock JOIN store_update_stock_details ВКЛ. store_update_stock. update_stock_id = store_update_stock_details. update_stock_id JOIN store_officer ON store_update_stock. supplier = store_officer. officer_id JOIN tbl_supplier ON store_update_stock. supplier = tbl_supplier. supplier_id INNER JOIN store_item ON store_update_stock_details. item = store_item. item_id ГДЕ store_update_stock. status = '1' и store_item. item_id = 3 ЗАКАЗАТЬ ПО store_update_stock. purchased_date DESC

Имя файла: C: /xampp/htdocs/doastores/application/models/Report_model.php

Номер строки: 112

06) Но запрос работает в PhPMyAdmin.Я не могу понять, что может быть не так в этом пункте.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 25 ноября 2018

У меня есть две идеи.Надеюсь, один или другой решит проблему.

Глядя на отображение сообщения об ошибке оператора запроса, я вижу, что отсутствует псевдоним «поставщик», а также подстановочный знак для всех полей (*).Это часто указывает на то, что Query Builder трудно экранировать значения и идентификаторы.

Поэтому первое, что нужно попробовать, это отключить "экранирование" для оператора select(), что делается путем передачи FALSE в качествеВторой аргумент.Это достаточно безопасно, так как не требуется ввод данных пользователем.

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

Выполняя эти две вещи, код теперь выглядит так:

$this->db->select("store_update_stock_details.item,
CASE store_update_stock.order_status
  WHEN 'purchase' THEN tbl_supplier.supplier_name
  WHEN 'issue' THEN store_officer.officer_name
END AS supplier, *", false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...