Mysql在Mysql客户端上选择查询成功但通过PHP失败

时间:2016-05-25 06:12:38

标签: php mysql

我有一个通过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;

3 个答案:

答案 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表中错误的字段名称。