$ mysqli- & gt; disabled_rows возвращает 0 multi_query

У меня есть простой код. Этот запрос работает нормально. Работает напрямую через 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;
}

2

Решение

Вот 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);
?>
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;
}
-1

По вопросам рекламы [email protected]