我正在从php调用存储过程
<?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());
?>
存储过程如下所示
BEGIN
SET @userid = (SELECT * FROM user WHERE user.id = id);
SELECT @userid;
END
程序参数
IN id int(10), OUT userid VARCHAR(255)
问题:
@userid
需要什么数据类型? 答案 0 :(得分:1)
您的存储过程存在一些问题。
由于您有userid
。
@userid
此外,您输出userid
,因此无需SELECT
另一件事是,您不能将整行选择为单个变量,对于多列,您应该使用多个输出变量。
BEGIN
SET userid = (SELECT column_name FROM user WHERE user.id = id);
END
$result = $base->query("CALL get_id($id)");
while($data = $result->fetch_array(MYSQL_ASSOC)){
echo $data['column_name'];
}
答案 1 :(得分:1)
目前,您正在为整个查询结果集定义标量参数,如星号所示。请考虑使用INTO
子句将一个查询结果值传递到OUT
参数:
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
变量:
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";
}