2016-04-15 20 views
2

私は単純なコードを持っています。このクエリは正常に動作します。それはSQLとphpから直接動作します($mysqli->queryから$mysqli->multi_queryに変更されてPHPで動作しますが)$mysqli->affected_rows return 0です。実際に挿入された行があり、heidisqlを使用してクエリを実行すると、次のようにレポートされます。

影響を受ける行:2警告: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

名前、パスワード、ユーザー名の列はどこから取得しましたか? – Phiter

+0

私は自分のシステムで試しましたので、最新の@PhiterFernandesをチェックしてください。 –

+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

OK、なぜ私はそれを同じ方法で得ることができないのですか? –

+0

hi、@ M.G。私はそれを見直してくださいaltarationをしていた。 –

関連する問題