gpt4 book ai didi

php - 存储过程 php pdo 与 mariadb - 做错事

转载 作者:行者123 更新时间:2023-11-29 09:31:44 25 4
gpt4 key购买 nike

完全免责声明我以前从未使用过存储过程,但对于常规查询非常有能力。我没有从我创建的存储过程测试中得到任何结果,但我知道有结果,因为我可以从“正常”查询中获取它们。我做错了什么?

CREATE PROCEDURE get_snet(
IN one VARCHAR(255),
IN two VARCHAR(255)
)

BEGIN
SELECT
IFNULL( (SELECT cats FROM results081219 WHERE url = @one LIMIT 1), '') AS cats1,
IFNULL( (SELECT cats FROM results081219 WHERE url = @two LIMIT 1), '') AS cats2;
END
$$
DELIMITER ;

php:

$parsed1 = 'google.com';
$parsed2 = 'gmail.com';

//stored procedure way
$stmt = $dbnet->prepare("
CALL get_snet(:parsed1, :parsed2);
");

$binding = array(
'parsed1' => $parsed1,
'parsed2' => $parsed2
);
$stmt->execute($binding);

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo "<pre>";
print_r($results);
echo "</pre>";

结果:

Array
(
[0] => Array
(
[cats1] =>
[cats2] =>
)

)

另外,存储过程中的字符串是否需要定义VARCHAR(xxx)?在我的正常查询中,由于该字符串是由 php 提供的,因此没有定义长度,我希望保持不变。

最佳答案

@one 用于 mysql session 变量。它有它的用途。

你需要做的是

CREATE PROCEDURE get_snet(
IN one VARCHAR(255),
IN two VARCHAR(255)
)

BEGIN
SELECT
IFNULL( (SELECT cats FROM results081219 WHERE url = one LIMIT 1), '') AS cats1,
IFNULL( (SELECT cats FROM results081219 WHERE url = two LIMIT 1), '') AS cats2;
END
$$
DELIMITER ;

关于php - 存储过程 php pdo 与 mariadb - 做错事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566810/

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