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