【问题标题】:PDO Mysql create function and use in selectPDO Mysql 创建函数并在select中使用
【发布时间】:2018-04-24 13:36:42
【问题描述】:

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

【问题讨论】:

    标签: mysql pdo fatal-error


    【解决方案1】:

    这里有一些问题。首先,您没有检查$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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2019-12-31
      • 1970-01-01
      相关资源
      最近更新 更多