Извлечение нескольких записей с использованием объекта MySQLi - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь вернуть несколько наборов записей, используя хранимую процедуру, подобную этой:

CREATE PROCEDURE `multiple`()
BEGIN    
    SELECT * FROM account;
    SELECT * FROM admin;    
END$$

Когда я нажимаю CALL множественный () в mysql UI, как SQLYog, я получаю результат в отдельной вкладке для каждого набора записей. Но когда я пытаюсь вызвать эту хранимую процедуру в моем php-скрипте, использующем соединитель mysqli, я просто получаю первый набор записей.

Вот мой php-скрипт:

<?php
// New Connection
$db = new mysqli('localhost','root','','db_test');

// Check for errors
if(mysqli_connect_errno()){
 echo mysqli_connect_error();
}
echo "<pre>";

// 1st Query
$result = $db->query("call multiple()");
if($result){
     // Cycle through results
    while ($row = $result->fetch_object()){
        $user_arr[] = $row;
    }
    // Free result set
    $result->close();
    $db->next_result();
}
print_r($user_arr);

Как мы можем получить второй набор записей, используя объект mysqli?

1 Ответ

1 голос
/ 16 августа 2012

Вы должны использовать подготовленные заявления:

Процедура создания:

DELIMITER $$
CREATE PROCEDURE `multiple`()
BEGIN    
    SELECT * FROM account;
    SELECT * FROM admin;    
END $$

Получить несколько наборов записей в PHP:

//connection
$mysqli = new mysqli('hostname','username','password','db_name');

// Check for errors
if(mysqli_connect_errno()){
   echo mysqli_connect_error();
}

//prepare statement
$stmt = $mysqli->prepare("call multiple()");

//run statement
$stmt->execute();

//fetch all recorsets returned by procedure

$recordset_Counter = 0;

while ( $stmt->more_results() )
{
   echo "Recordset($recordset_Counter) : <br/>";
   $res = $stmt->get_result();

   //fetch all records from current recordset
   while( $row = $res->fetch_assoc() )
   {   print_r($row); echo "<br/>";  }

   $stmt->next_result();
   $recordset_Counter++;
}
...