首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从php调用存储过程

从php调用存储过程
EN

Stack Overflow用户
提问于 2016-05-03 22:48:42
回答 2查看 99关注 0票数 1

我正在从php调用一个存储过程

代码语言:javascript
复制
<?php
include('global/db.php');
$id = 1;
$base = conn();
$query = "CALL get_id(:id,@userid)";
$stmt = $base->prepare($query);
$stmt->bindParam(':id',$id);
$stmt->execute();
print_r($stmt->fetch());
?>

存储过程如下所示

代码语言:javascript
复制
BEGIN
SET @userid = (SELECT * FROM user WHERE user.id = id);
SELECT @userid;
END

工序参数

代码语言:javascript
复制
IN id int(10), OUT userid VARCHAR(255) 

问题:

  • 为什么我的结果什么都不回?
  • 输出变量@userid需要什么样的数据类型?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-04 03:34:55

您的存储过程有一些问题。

既然您有一个输出userid,为什么是这个@userid

而且,您正在输出userid,因此不需要SELECT它。

另一件事是,您不能将整个行选择到一个变量中,对于多个列,您应该使用多个输出变量。

代码语言:javascript
复制
BEGIN
    SET userid = (SELECT column_name FROM user WHERE user.id = id);
END

更新

代码语言:javascript
复制
$result = $base->query("CALL get_id($id)");  
while($data = $result->fetch_array(MYSQL_ASSOC)){
   echo $data['column_name'];
}
票数 1
EN

Stack Overflow用户

发布于 2016-05-04 03:37:52

目前,您正在为整个查询结果集定义标量参数,如星号所示。考虑使用INTO子句将一个查询结果值传递给OUT参数:

代码语言:javascript
复制
DELIMITER $$
CREATE PROCEDURE get_id (
  IN  id int(10), 
  OUT userid VARCHAR(255))
BEGIN
  SELECT user.id
  INTO userid
  FROM user
  WHERE user.id = id;
END$$
DELIMITER ;

在PHP中,需要运行第二个查询才能在fetch命令中返回@userid变量:

代码语言:javascript
复制
try {
    include('global/db.php');
    $id = 1;
    $base = conn();
    $query = "CALL get_id(:id,@userid)";
    $stmt = $base->prepare($query);
    $stmt->bindParam(':id',$id);
    $stmt->execute();

    $result = $base->query("SELECT @userid")->fetchAll();
    if ($result) { print_r($result); }

} catch (PDOException $pe) {
    echo $pe->getMessage()."\n";        
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37015662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档