gpt4 book ai didi

php - 二进制输出参数 - PHP、PDO、MySQL : result is always null

转载 作者:可可西里 更新时间:2023-11-01 08:39:59 26 4
gpt4 key购买 nike

我有一个 MySQL 存储过程,它通过输出参数返回一个 UUID。我正在使用 PDO 从 PHP 调用此过程 - 但我只是为输出参数返回 null ...输出数据类型没有明确的二进制选项(PDO::PARAM_???) - 我猜最接近是LOB。有谁知道如何做到这一点?这是我的 PHP 代码:

public function CreateTenant($name)
{
$qry = $this->conn->prepare("call spInsertTenant(:name, :userId, :id)");
$qry->bindParam(':name', $name);
$qry->bindParam(':userId', $this->currUser);
$qry->bindParam(':id', $id, PDO::PARAM_LOB, 16);
try {
$qry->execute();
return $id;
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}

编辑:好的 - 原始过程很长。这是我遇到的具有相同问题的 MySQL 和 PHP 的组合。注意-我的表中没有插入任何内容-即使没有抛出错误。感谢 Mihai 同意首先声明 $vars ...尝试过但没有任何运气。还有 trincot - 我的 UUID 绝对是二进制的 - 他们正在使用这个:https://www.percona.com/blog/2014/12/19/store-uuid-optimized-way/

这是存储过程:

CREATE TABLE IF NOT EXISTS `Tenant2` (
`ID` BINARY(16) NOT NULL,
`Name` VARCHAR(45) NULL,
PRIMARY KEY (`ID`));

drop procedure if exists spInsertTenant2;
delimiter $$
CREATE PROCEDURE `spInsertTenant2`(pName nvarchar(45), out oId binary(16))
begin

set @id = ordered_uuid(uuid());

insert Tenant2 (ID, Name)
values (@id, pName);

set oId = @id;

end$$
delimiter ;

call spInsertTenant2('Test', @id);
select * from Tenant2;
select @id, hex(@id);

这里有一些 PHP 可以 Hook 到这里:

...
// Create connection
$this->conn = new PDO('mysql:dbname=' . $this->database . ';host=' . $this->servername, $this->username, $this->password);
...

function testParam()
{
try {
$name = 'SomeName';
$id = 0;
$qry = $this->conn->prepare('call spInsertTenant2(:name :id)');
$qry->bindParam(':name', $name);
$qry->bindParam(':id', $id, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);
$qry->execute();
print $id;
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}

请注意与数据库的连接正在运行 - 我能够执行选择语句并毫无问题地取回数据。

最佳答案

问题不在于参数类型——有关该主题的 PDO 文档不正确。以下帖子描述了解决方法。 http://forums.mysql.com/read.php?98,167022,222800#msg-222800OUT or INOUT argument 1 for routine xxx is not a variable or NEW pseudo-variable in BEFORE trigger .

关于php - 二进制输出参数 - PHP、PDO、MySQL : result is always null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35782482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com