我在存储过程中使用两个IN和OUT参数,我得到两个结果,我想在PHP中得到两个结果

时间:2017-08-23 07:20:36

标签: php stored-procedures

    CREATE PROCEDURE `prev1`(IN `page` INT(50), OUT `foundrows` INT(255))
BEGIN DECLARE foundrows varchar(255);
SELECT SQL_CALC_FOUND_ROWS  * FROM studentmarks limit page ,6;
SELECT FOUND_ROWS()as foundrows;
END

这是我的PHP代码

$pag=$_GET["offset"];
$sql="call prev1($pag,@foundrows)";
$result = mysqli_query($conn,$sql);

我的回答是

mysqli_result Object
(    [current_field] => 0  
  [field_count] => 13   
 [lengths] =>   
  [num_rows] => 6   
 [type] => 0
)

但我的found_rows没有进入PHP。但我的total_rows是19,但只显示[num_rows] => 6

1 个答案:

答案 0 :(得分:1)

使用存储过程返回值:
SQL:

 DELIMITER //
 CREATE PROCEDURE prev1(IN `page` INT, OUT `Out_val` INT)
 BEGIN
    SELECT SQL_CALC_FOUND_ROWS  * FROM studentmarks limit page ,6;
    SELECT FOUND_ROWS() INTO Out_val;
 END //
 DELIMITER ;

PHP代码:

<?php
error_reporting(-1);
ini_set('display_errors', 'On');

?>
<!DOCTYPE html>
<html>
<body>

<?php
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "dbname";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

 $pag = 1;
 $conn->multi_query("CALL prev1($pag,@Out_val);SELECT @Out_val as count");
do {
    /* store first result set */
    if ($result = $conn->store_result()) {
        while ($row = $result->fetch_row()) {
            print_r($row);
        }
        $result->free();
    }
    /* print divider */
    if ($conn->more_results()) {
        printf("-----------------\n");
    }
} while ($conn->next_result());

?> 

</body>
</html>

我希望这会有所帮助。