pdo mysql create函数及其在select中的使用

ymdaylpp  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(513)

我想在pdo设置中创建一个mysql函数。

$connection->exec('
DROP FUNCTION IF EXISTS return_id
CREATE FUNCTION return_id(id int(11)) RETURN int(11)
BEGIN
return id;
END');

$fetch=$connection->query('select *,return_id(id) as new_id from category')->fetchall();
print_r($fetch);

我得到一个错误:

FATAL ERROR: UNCAUGHT ERROR: CALL TO A MEMBER FUNCTION FETCHALL() ON BOOLEAN
fslejnso

fslejnso1#

这里有一些问题。首先,您没有检查您的产品的退货状态 $connection->exec 调用将为false,因为您有语法错误,缺少 ; 在第一行的末尾,即

DROP FUNCTION IF EXISTS return_id;

但是,pdo::exec不会执行多个语句,因此需要将函数定义放在单独的 exec 不管怎样。
下一步: RETURN 应该是 RETURNS 最后,您没有检查调用的结果 $connection->query 也在回归 false (没有成员函数fetchall的布尔值),因为它由于前面的错误而失败。
为了让它工作,你需要把你的代码改成这个。但是,作为最佳实践,您还应该检查调用的结果 $connection->exec 以及 $connection->query .

$connection->exec('DROP function IF EXISTS return_id');
$connection->exec('CREATE FUNCTION return_id(id int(11)) RETURNS int(11) BEGIN return id; END');
$fetch=$connection->query('select *,return_id(id) as new_id from category')->fetchall();
print_r($fetch);

相关问题