我無法在我的後續sql查詢中訪問我的用戶定義函數strip_punctuation()。我正在使用PHP和PDO。Mysql錯誤2014或1305試圖在sql查詢中調用用戶定義函數
我不斷收到兩個錯誤之一不管我怎麼嘗試這樣的:
MySQL error 2014 Cannot execute queries while other unbuffered queries are active
OR
MySQL error 1305 Function does not exists.
我已經準備使用()試過了,exec()和各種其他的組合,但無論我做什麼,我都會得到空的結果或上面兩個錯誤之一。
這裏是我的功能
(注意函數:$ this-> PROJECT_DB->連接 - >相當於PDO->連接 - >)
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('[email protected]') 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;
}
當我運行兩個查詢(定義函數和簡單的select語句)在Sequel Pro(一個sql編輯器程序)中,我沒有問題。 我試過在一個查詢中運行這兩個語句,並且沒有返回任何結果。
我運行PHP 29年3月5日與PDO_MYSQL 5.5.40-36.1
是的,我嘗試過,但我仍然得到2014錯誤:無法執行查詢,而其他未緩衝的查詢處於活動狀態。考慮使用PDOStatement :: fetchAll()。我也嘗試了一個非常簡化的用戶定義函數。非常奇怪,因爲它實際上在工作之前,沒有fetchAll,沒有設置MYSQL_ATTR_USE_BUFFERED_QUERY。我開始認爲這是關於PDO安裝的問題。 –