【发布时间】:2016-04-17 17:44:41
【问题描述】:
我无法在后续的 sql 查询中访问我的用户定义函数 strip_punctuation()。我正在使用 PHP 和 PDO。
无论我如何尝试,我都会遇到以下两个错误之一:
MySQL 错误 2014 无法在其他无缓冲查询时执行查询 活跃
或
MySQL 错误 1305 函数不存在。
我尝试过使用 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 语句)时,我没有任何问题。 我尝试在一个查询中运行这两个语句,但没有返回任何结果。
我正在使用 pdo_mysql 5.5.40-36.1 运行 PHP 5.3.29
【问题讨论】: