pdo定义一个函数然后在select语句中使用它

时间:2013-06-17 12:39:04

标签: php mysql sql pdo sql-function

我的查询有点像这样:

CREATE FUNCTION func ... ;
SELECT * FROM  ....;

我正在使用php PDO$pdo->query()中不允许超过1个语句,所以我决定将查询拆分为两个,所以执行{{ 1}}使用CREATE FUNCTION进行查询,然后在select语句中使用$pdo->exec()

但是,我在执行$pdo->query()的select语句时遇到错误。我该如何解决这个问题?当我在phpmyadmin中作为单个查询运行它时它可以正常工作

编辑:PHP代码:

FUNCTION database.func does not exist

3 个答案:

答案 0 :(得分:2)

使用PDO创建用户定义的函数只需要exec工作,不需要分隔符。这里$ db是PDO实例。

$db->exec('CREATE FUNCTION ConvertHTMLToText(str LONGTEXT CHARSET utf8) RETURNS LONGTEXT CHARSET utf8 BEGIN DECLARE start, end INT DEFAULT 1; LOOP SET start = LOCATE("<", str, start); IF (!start) THEN RETURN str; END IF; SET end = LOCATE(">", str, start); IF (!end) THEN SET end = start; END IF; SET str = TRIM(INSERT(str, start, end - start + 1, "")); END LOOP; END');

答案 1 :(得分:1)

修改

这是多重陈述。第一部分是DROP FUNCTION MyFunc IF EXISTS,第二部分是CREATE FUNCTION

这是我之前的回答,这是正确的,但OP更改了代码:

您没有说$object->db是什么:

您致电connectPDO("user","pass");,然后使用$object->db->exec($sqlPreliminary);$object在功能体中应该是全球性的。目前它不是,所以它是一个局部变量,在函数结束后丢失。其余代码中的$object是不同的。

答案 2 :(得分:0)

我遇到了同样的问题。当我删除“DELIMITER //”时(也//         DELIMITER;最后),它的工作原理。我认为PHP PDO不再需要DELIMITER。

$sqlPreliminary = "
    DROP FUNCTION IF EXISTS myFunc;

    CREATE FUNCTION myFunc (id INT)
        RETURNS DECIMAL

        BEGIN
        RETURN id + 1;
        END 

“;

我测试了这个并且工作了。