2016-04-15 3 views
2

Ich habe einfachen Code. Diese Abfrage funktioniert einwandfrei. Es funktioniert direkt durch SQL und von PHP auch (geändert $mysqli->query zu , damit es von PHP funktioniert), aber es $mysqli->affected_rows zurück 0. Es sind tatsächlich Zeilen eingefügt und wenn ich es die Abfrage durch heidisql es Berichte:

Betroffene Zeilen: 2 Gefundene Zeilen: 0 Warnungen: 0 Dauer für 2 Abfragen: 0,000 Sek.

Wie soll ich betroffene Zeilen zählen? Was mache ich falsch?

Ich versuchte auch rowCount() und half nicht wirklich.

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

vielleicht interessant? http://stackoverflow.com/a/22396503/3184785. Es scheint, dass Sie die 'affected_rows' akkumulieren müssen, wenn Sie' next_results' überprüfen. –

Antwort

-1

erste Datensatz einfügen dann machen Auswahlabfrage

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

Woher haben Sie den Namen, Passwort und Benutzernamen Spalten? – Phiter

+0

Ich habe es in meinem System versucht, also bitte updated @PhiterFernandes, hast du DW meine Antwort? –

+0

Ich denke, dass OP mehrere Abfragen verwendet, weil er den Wert von "@ b" in der 'INSERT'-Abfrage danach verwenden wird, so dass die' INSERT' nach dem 'SELECT' kommen müssen. – Phiter

1

Hier CALL user('param1','param2','param3','param4'); ist eine gespeicherte Prozedur, in dem Sie eine beliebige Anzahl von Abfragen schreiben.

Sie können die Funktion ROW_COUNT() verwenden, um die Anzahl der betroffenen Zeilen zu ermitteln, und sie mit der Anweisung select als Ausgabe abrufen.

Verfahren

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 Script:

<?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 sein, aber Heidi SQL bekommt irgendwie betroffen Zeilen waren 2, Warum kann ich es nicht genauso machen? –

+0

Hallo, @ M.G. Ich habe eine Altaration gemacht. –