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

PDO Mysql创建函数并在select中使用,mysql,pdo,fatal-error,Mysql,Pdo,Fatal Error,我想在我的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(

我想在我的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
调用的返回状态,这将是错误的,因为您有语法错误,缺少
在第一行的末尾,即它应该是

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);