mysql将变量值添加到存储过程中的结果集

标签 mysql stored-procedures

我有这个场景(工作正常):

CREATE PROCEDURE `my_sp`(
  IN in_var VARCHAR(32),
  OUT out_var VARCHAR(255)
)
BEGIN   

  DECLARE mysql_query VARCHAR(255);
  DECLARE mysql_result VARCHAR(32);

  SET @mysql_query = CONCAT("
    CALL other_BD.other_Stored_Procedure( '",in_var,"', @other_sp_result );
  ");

  PREPARE stmt FROM @mysql_query;
  EXECUTE stmt;
  SELECT @other_sp_result INTO @mysql_result;
  DEALLOCATE PREPARE stmt;

  IF (@mysql_result = 'OK') 
  THEN
    SELECT * FROM my_table WHERE my_column = 'my_value' LIMIT 1;
    SET out_var = 'whatever';
  ELSE
    SET out_var = 'NOT OK'; 
  END IF;
END;

PHP:

$dbh = new PDO( $connection_params );

$sql = "CALL my_sp( :in_var , @outvar )";

$stmt = $dbh->prepare( $sql );
$stmt->execute( array( ':in_var' => $_POST['in_var'] ) );

//that return the result from SELECT * FROM my_table ... (from my_sp)
$result1 = $stmt->fetchAll( PDO::FETCH_ASSOC );

//That avoid error: Cannot execute queries while other unbuffered queries are active ...
$stmt->closeCursor();


$sql = "SELECT @outvar";
$query = $dbh->query( $sql );
//that return the out_var result ("whatever" for this case);
$result2 = $query->fetchAll( PDO::FETCH_ASSOC );

问题是:

有没有办法添加

SET out_var = 'whatever'

结果

SELECT * FROM my_table WHERE my_column = 'my_value' LIMIT 1;

因此只在 php 中进行一次查询以将所有数据集中在一起,例如:

col_1 => 'val', ... col_n => 'val' ... my_out_var => 'whatever_value'

最佳答案

尝试这样使用:

第一步:

create procedure proc_out(input int,out this_out int)
BEGIN

//Your code here..
set this_out = input * 2;

end


$sql ="call proc_out(10, @outvar);
select @outvar;"

或者

像这样包装你的旧存储过程:

第二步:

create procedure proc_get_outvar(input int)
begin 

    call proc_out(input, @outvar);
    select @outvar;

end;

使用:

$sql ="call proc_out(10);"

您可以在该过程中替换您需要的数据类型:

希望对你有帮助。

关于mysql将变量值添加到存储过程中的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43035919/

相关文章:

mysql - PHP MySQL 如何计算行之间的距离?

mysql - Bash:使失败的 zip 变得冗长

php - 存储过程准备语句错误mysql php

mysql - 存储过程不工作

php - 通过 PHP 更新数据库

mysql - 连续从linux中的FIFO管道将数据插入mysql表数据

java - Hibernate 在使用@ManyToOne 的查询中返回空 hql

sql - 查找存储过程的哪些参数可为空(可选)

mysql更新语句与过程中的变量

mysql - 使用从 MS-SQL 转换为 MySQL 的存储过程的 IF 语句出现语法错误