【问题标题】:mysql stored procedure SELECT * into out parameter not workingmysql存储过程SELECT * into out参数不起作用
【发布时间】:2017-03-11 21:43:13
【问题描述】:

SQL

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

  /*This work OK*/  
  SELECT my_column INTO out_var FROM my_table WHERE my_column = in_var LIMIT 1;

  /*This not work*/
  SELECT * INTO out_var FROM my_table WHERE my_column = in_var LIMIT 1;

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'] ) );

$sql = "SELECT @outvar";
$query = $dbh->query( $sql );
$result = $query->fetchAll( PDO::FETCH_ASSOC );

当我尝试 'SELECT * ...' 时,在 php var_dump($stmt) 中返回 false;

我是从 MySQL 入手的,不知道是不是不能在存储过程中做这种类型的查询(SELECT *),还是别的什么?

【问题讨论】:

  • 嗯,多列不等于一个变量。这个错误完全有道理。

标签: mysql stored-procedures


【解决方案1】:

删除out_var 声明,您将能够获取所有列:

CREATE PROCEDURE `my_sp`(
    IN in_var VARCHAR(32)
)
BEGIN

  SELECT * FROM my_table WHERE my_column = in_var LIMIT 1;

END;

或者你可以为每一列声明一个变量。

【讨论】:

  • 这就是我想要的。当我尝试它时,我意识到不必删除已声明的变量,只需从查询中删除 INTO out_var 语句即可。这样,同一个 SP 可以在多种模式下使用,条件为 IF 等。
猜你喜欢
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多