gpt4 book ai didi

php - Mysql 错误 2014 或 1305 尝试在 sql 查询中调用用户定义的函数

转载 作者:行者123 更新时间:2023-11-30 22:27:38 25 4
gpt4 key购买 nike

我无法在后续的 sql 查询中访问我的用户定义函数 strip_punctuation()。我正在使用 PHP 和 PDO。

无论我如何尝试,我都会不断收到以下两个错误之一:

MySQL error 2014 Cannot execute queries while other unbuffered queries are active

MySQL error 1305 Function does not exists.

我尝试过使用 prepare()、exec() 和各种其他组合,但无论我做什么,我要么得到空结果,要么得到上述两个错误之一。

这是我的功能

(注:$this->PROJECT_DB->connection->等同于PDO->connection->)

public function searchAutoComplete($searchString){
$this->PROJECT_DB->connection->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

$sql ="DROP FUNCTION IF EXISTS strip_punctuation;
DELIMITER | CREATE FUNCTION strip_punctuation($input text) RETURNS text
BEGIN
DECLARE $stringValue VARCHAR(100);
SET $stringValue = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE($input,'.',''),',',''),'?',''),'@',''),'#',''),'$',''),'%',''),'^',''),'*',''),'<',''),'>',''),':',''),'\n',''),')','');
RETURN $stringValue;
END; | DELIMITER ;";

//$query = $this->PROJECT_DB->connection->exec($sql);
$query = $this->PROJECT_DB->connection->query($sql);

if($query===false){
throw new Exception('Project.model: searchAutoComplete: Error with strip_punctiation function. Error was: ' . print_r($this->PROJECT_DB->connection->errorInfo(),true) . ';<br />SQL was: <br />' . $sql);
}

$sql=" SELECT strip_punctuation('something@else.com') AS FoundWord;";

$query = $this->PROJECT_DB->connection->query($sql);



if($query===false){
throw new Exception('Project.model: searchAutoComplete: Error with select query. Error was: ' . print_r($this->PROJECT_DB->connection->errorInfo(),true) . ';<br />SQL was: <br />' . $sql);
}
$results = $query->fetchAll(PDO::FETCH_OBJ);

return $results;
}

当我在 Sequel Pro(一个 sql 编辑器程序)中运行两个查询(定义函数和简单的 select 语句)时,我没有遇到任何问题。我试过在一个查询中运行这两个语句,但没有返回任何结果。

我正在运行 PHP 5.3.29 和 pdo_mysql 5.5.40-36.1

最佳答案

假设您的函数定义明确(因为您确实对其进行了测试),2014 年错误是由于在获取较早查询的结果之前尝试运行查询造成的。您还必须在定义函数之后调用 PDO 的获取方法,以获取 MySQL 的响应。

TL;DR: 只需添加

$query->fetchAll();

在您的第一个查询之后,这应该可以解决问题。

关于php - Mysql 错误 2014 或 1305 尝试在 sql 查询中调用用户定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com