我有一个通过heidisql运行良好的查询但是如果通过PHP,它会在没有任何错误报告的情况下失败。
这是代码
PHP
$sql = "SELECT `pob`.`id` , `pob`.`po_qty` , ifnull(`mrb`.`rcv_qty`,0) as `rcv_qty` , ( `pob`.`po_qty` - ifnull( sum( `mrb`.`rcv_qty` ), 0 )) AS balance FROM `mpo_body` AS `pob` LEFT JOIN `mrcv_body` AS `mrb` ON `pob`.`id` = `mrb`.`po_id` WHERE `pob`.`id`='$id' GROUP BY `pob`.`id`";
$result = $mysqli->query($sql);
if($result->num_rows>0){
$row = $result -> fetch_assoc();
if($row['balance']>0){
$sql = "UPDATE `mpo_body` SET close='Y' WHERE `id`='$id'";
echo $mysqli->query($sql);
}else{
echo "failed here";
}
}else{
echo "failed at here";
}
造成这个问题的原因是什么?
更新
这是mpo_body
中的数据结构DROP TABLE IF EXISTS `mpo_body`;
CREATE TABLE `mpo_body` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `po_no` varchar(30) NOT NULL DEFAULT '', `item_no` char(3) NOT NULL DEFAULT '', `matcode` varchar(25) NOT NULL DEFAULT '', `po_qty` decimal(16,2) NOT NULL DEFAULT '0.00', `unit_price` decimal(20,2) NOT NULL DEFAULT '0.00', `etd_date` date NOT NULL DEFAULT '0001-01-01', `po_bal` double NOT NULL DEFAULT '0', `ref_no` varchar(255) NOT NULL DEFAULT '', `dept_no` varchar(25) NOT NULL DEFAULT '', `uom` varchar(10) NOT NULL DEFAULT '', `factor` int(11) NOT NULL DEFAULT '1', `rev_no` varchar(5) NOT NULL DEFAULT '', `cancel` char(1) NOT NULL DEFAULT 'N', `del_note` varchar(100) NOT NULL DEFAULT '', `closed` char(1) NOT NULL DEFAULT 'N', `upt_time` time NOT NULL, `prid` int(11) NOT NULL, `remark` varchar(200) NOT NULL DEFAULT '', PRIMARY KEY (`id`), KEY `matcode` (`matcode`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
LOCK TABLES `mpo_body` WRITE; /*!40000 ALTER TABLE `mpo_body` DISABLE KEYS */;
INSERT INTO `mpo_body` (`id`, `po_no`, `item_no`, `matcode`, `po_qty`, `unit_price`, `etd_date`, `po_bal`, `ref_no`, `dept_no`, `uom`, `factor`, `rev_no`, `cancel`, `del_note`, `closed`, `upt_time`, `prid`, `remark`) VALUES (1,'P05-000001','002','30001352',1.00,1.00,'2016-05-28',1,'','PURCHASING','PCS',1,'','N','','N','00:00:00',21,''), (2,'P05-000001','001','30001352',1.00,1.00,'2016-05-28',1,'','PPMC','PCS',1,'','N','','N','00:00:00',4,'');
/*!40000 ALTER TABLE `mpo_body` ENABLE KEYS */; UNLOCK TABLES;
答案 0 :(得分:0)
你必须使用while,如下:
$sql = "SELECT `pob`.`id` , `pob`.`po_qty` , ifnull(`mrb`.`rcv_qty`,0) as `rcv_qty` , ( `pob`.`po_qty` - ifnull( sum( `mrb`.`rcv_qty` ), 0 )) AS balance FROM `mpo_body` AS `pob` LEFT JOIN `mrcv_body` AS `mrb` ON `pob`.`id` = `mrb`.`po_id` WHERE `pob`.`id`='$id' GROUP BY `pob`.`id`";
$result = $mysqli->query($sql);
if($result->num_rows>0){
while($row = $result->fetch_assoc()) {
if($row['balance']>0){
$sql = "UPDATE `mpo_body` SET close='Y' WHERE `id`='$id'";
echo $mysqli->query($sql);
}else{
echo "failed here";
}
}
}else{
echo "failed at here";
}
答案 1 :(得分:0)
你调试了$ row的响应吗? print $ row变量没有必要循环CI的行为是它会提供索引方式的数组。因此,如果你想访问价值你的条件应该是if($ row ['balance'] [0]> 0)这样的。
答案 2 :(得分:0)
很抱歉,我发现了问题,我错过了字段名称,应该是closed
而不是close
,更新了mpo_body
表中错误的字段名称。