我的查询有点像这样:
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
答案 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
“;
我测试了这个并且工作了。