PHP Mysqli从多表中选择值

时间:2017-10-27 14:21:27

标签: mysql

我创建了2个数据库表,1个是客户订单,1个是库存商店和网站。

我想按顺序显示股票。但是我没有成功地选择有库存的数据库。

  <?php
                            $rowCount = count($_GET['bid_id']);
                            for($i=0;$i<$rowCount;$i++) {
                                $result = $DBcon->query("SELECT c.*, SUM(s.stoc) as stoc, SUM(s.stoc_rezervat) as stoc_rezervat, s.sku FROM comenzi_okazii AS c LEFT JOIN stocuri_mentor AS s ON c.nume_produs LIKE s.sku WHERE bid_id='$bid_id'");
                                while($row[$i] = $result->fetch_array()) {?>
                                    <tr class="titlerow">
                                        <td id="<?php echo $bid_id; ?>"><button type="button" class='btn btn-danger delete' id="<?php echo $row[$i]['id']; ?>"><i class="fa fa-minus"></i></button></td>
                                        <td><input class="form-control" required oninvalid="this.setCustomValidity('Cod Produs este Gol')" placeholder="Cod Produs" style="width:100%" type='text' id='cod_produs_1' name='nume_produs[]' value="<?php echo $row[$i]['nume_produs']; ?>"/></td>
                                        <td style='width:100px'><input class="form-control qty_1" placeholder="Cantitate" style="width:100%" type="text" id="qty_1" name='qty[]' value="<?php echo $row[$i]['qty']; ?>"/></td>
                                        <td><input class="form-control" placeholder="Nume" style="width:100%" type='text' id='nume_1' name='nume_ales[]' value="<?php echo $row[$i]['nume_ales']; ?>"/></td>
                                        <td style='width:100px'><input class="form-control" readonly placeholder="Stoc" style="width:100%" type='text' id='stoc_1' name='stoc_magazin[]' value="<?php echo $row[$i]['stoc']; ?>"/></td>
                                        <td style='width:100px'><input class="form-control" readonly placeholder="Rezervat" style="width:100%" type='text' id='stoc_rez_1' name='stoc_rezervat[]' value="<?php echo $row[$i]['stoc_rezervat'];?>"/></td>

但是,不要使用该股票或仅显示1个产品的信息或隐藏所有产品并仅显示一个产品。

来自数据库comenzi_okazii的结构会保存订单中的产品。

id - AI 
bid_id - Number of Order
nume_produs - Product Code (SKU)
qty - Quantity of product in order
price - Price of Product 

来自DB stocuri_mentor的结构我的管理程序保存

的库存
shop.
id - AI
sku - Product Code(SKU)
stoc - Product Stock
stoc_rezervat - Reserved stock

由于

1 个答案:

答案 0 :(得分:0)

SELECT列表中的聚合函数(SUM(),没有GROUP BY子句意味着查询将返回一行行。

(其他关系数据库会抛出错误,SELECT列表中的非聚合表达式不会出现在GROUP BY子句中。特定于MySQL的非标准扩展允许查询执行,而不会抛出错误。)

添加GROUP BY子句以获取表达式(或表达式集)的每个不同值的行

例如:

  SELECT c.*
       , SUM(s.stoc) AS stoc
       , SUM(s.stoc_rezervat) AS stoc_rezervat
       , s.sku
    FROM comenzi_okazii c
    LEFT
    JOIN stocuri_mentor s
      ON c.nume_produs LIKE s.sku
   WHERE c.bid_id = 'somevalue'
   GROUP BY c.nume_produs
-- ^^^^^^^^^^^^^^^^^^^^^^                    -- *** add GROUP BY clause ***   

GROUP BY的非标准行为记录在MySQL参考手册

https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html

SQL注入漏洞

根本不清楚$bid_id包含什么值,以及该值是否保证在SQL语句的文本中包含“安全”。代码模式似乎容易受到SQL注入攻击。我们没有看到$bid_id返回mysqli_real_escape_string

http://php.net/manual/en/mysqli.real-escape-string.php

首选模式是避免在SQL文本中包含值,而是使用带有绑定占位符的预处理语句

另见:

https://xkcd.com/327/

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet