2016-04-15 73 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。我已經做過修改,請檢查它。 –