2016-04-15 60 views
2

我有简单的代码。这个查询工作正常。它直接通过SQL和PHP工作(将$mysqli->query更改为$mysqli->multi_query以使其可以从PHP工作),但它$mysqli->affected_rows返回0。实际上有插入行,当我运行它通过heidisql查询它报告:

受影响的行:2找到的行:0警告:0 2查询的持续时间:0.000秒。

我该如何计算受影响的行数?我究竟做错了什么?

我也试过rowCount()并没有真正帮助。然后

include ("../connect.php"); 

$sql = "SELECT balance INTO @b 
      FROM managerstock 
      WHERE ID = LAST_INSERT_ID(); 
      INSERT INTO managerstock (`inOut`, quantity, balance) 
      VALUES (1, 1, 3);"; 

if($result = $mysqli->multi_query($sql)){ 
    echo $mysqli->affected_rows; 
} 
+0

也许有意思吗? http://stackoverflow.com/a/22396503/3184785。看起来你需要在检查next_results时累积'affected_rows'。 –

回答

-1

首先插入记录做出选择查询

include ("../connect.php"); 

$sql = "INSERT INTO managerstock (`inOut`, quantity, balance) 
      VALUES (1, 1, 3);SELECT balance INTO @b 
      FROM managerstock 
      WHERE ID = LAST_INSERT_ID();"; 

    if($result = $mysqli->multi_query($sql)){ 
     echo $mysqli->affected_rows; 
    } 
+0

你从哪里得到了姓名,密码和用户名colums? – Phiter

+0

我在我的系统中尝试过,所以请检查更新的@PhiterFernandes,你有DW我的答案? –

+0

我认为OP使用了多个查询,因为他之后会在'INSERT'查询中使用'@ b'的值,因此'INSERT'必须在SELECT之后。 – Phiter

1

这里CALL user('param1','param2','param3','param4');是,你可以写任何数量的查询的存储过程。

您可以使用ROW_COUNT()函数获取受影响的行数,并使用select语句将其作为输出获取。

程序

CREATE DEFINER=`root`@`localhost` PROCEDURE `user`(IN `p_mode` VARCHAR(100), IN `p_id` INT(3), IN `p_name` VARCHAR(100), IN `p_contact_no` VARCHAR(100)) 
    NO SQL 
begin 
    DECLARE 
     row_count int(11); 

    if p_mode='update' then 
     UPDATE `user` SET `name`=p_name, `contact_no`=p_contact_no WHERE `id`=p_id; 
     SET row_count = ROW_COUNT(); 
     select row_affected as row_count; 
    end if; 
end 

PHP脚本:

<?php 
function execute_qry($sql){ 
    $fire=mysqli_multi_query($this->conn,$sql); 
    $array_result= array(); 
    do{ 
     $res = array(); 
     if($result = $this->conn->store_result()) 
     { 
      while($row = mysqli_fetch_assoc($result)) 
      { 
       array_push($res,$row); 
      } 
      array_push($array_result,$res); 
     } 
    }while($this->conn->more_results() && $this->conn->next_result()); 
    return $array_result; 
} 
$query = "CALL user('update','1','hiren','1234');"; 
$exe_qry=execute_qry($query); 
?> 
+0

行,但heidi sql以某种方式得到受影响的行是2,为什么我不能以同样的方式得到它? –

+0

嗨,@ M.G。我已经做过修改,请检查它。 –