PDO Mysql 创建函数并在 select 中使用

PDO Mysql create function and use in select

我想在我的 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

这里有一些问题。首先,您没有检查 $connection->exec 调用的 return 状态,这将是错误的,因为您有语法错误,第一行末尾缺少 ; 即它应该是

DROP FUNCTION IF EXISTS return_id;

但是PDO::exec不会执行多条语句,所以无论如何都需要把函数定义放到一个单独的exec

下一个:RETURN应该是RETURNS

最后,您没有检查对 $connection->query 的调用结果,它也是 returning 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);