我创建了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
由于
答案 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://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet