我正在从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需要什么样的数据类型?发布于 2016-05-04 03:34:55
您的存储过程有一些问题。
既然您有一个输出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'];
}发布于 2016-05-04 03:37:52
目前,您正在为整个查询结果集定义标量参数,如星号所示。考虑使用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";
}https://stackoverflow.com/questions/37015662
复制相似问题