2012-11-15 71 views
2

我正在從普通mysql_ *遷移到PDO(是的,我知道這是2012年的日曆)。
我正在寫一個簡單的包裝類,以便有機會在我的網站上執行諸如 $ f = $ db-> FetchAll(「SELECT * FROM ...」) 。 下面是我在做什麼:PDO_MYSQL:一般錯誤2014

public function Query($q, $errmessage="", $params=array()) { 
    try { 
    $stmt=$this->connect->prepare($q); 
    if (is_array($params) && count($params)>0) { 
    $stmt->execute($params); 
    } else { 
    $stmt->execute(); 
    } 
    return $stmt; 
    } catch(PDOException $e) { 
    die($errmessage.": ".$e->GetMessage()); 
    } 
    } 

    public function Fetch($q, $arraylist=0) { 
    if (!is_object($q)) { // Assuming it's a raw query 
    $stmt=$this->Query($q, "Unable to process the query for fetching"); 
    } else $result=$q; 
    $f=$stmt->Fetch(); 
    return $f; 
} 

而這將引發「一般錯誤2014」異常。
任何幫助表示讚賞。
謝謝!

+0

您是否能夠定位線? 你可以提供整個班級(這可能是因爲其中一個屬性不包含你期望的內容) – FMaz008

+0

這裏是:[PasteBin](http://pastebin.com/rAUyCLna)。提前致謝! –

+0

它可能不能解決你的問題,但是不是調用你自己的查詢函數來準備一個從不具有任何變量的查詢,爲什麼不使用http://php.net/manual/fr/pdo.query .php?它會更快一點。 – FMaz008

回答

2

2014不是一年,這是一個錯誤代碼。下次嘗試googling the error

$ pdo->查詢( 「INSERT INTO test(一些)VALUES( '1111111111111111'), ( '1111111111111'); - 我是一個SQL註釋,奪去我可以解決這個問題 」) ;

由於「;」這是一個多語句,執行兩個查詢,而 第二個只是一個註釋。使用PDOStatement-> nextRowset可訪問第二個「結果」 。 [source]

或:

花費數小時試圖追查爲什麼我們在新服務器上得到這個 錯誤,以後同樣的代碼運行在其他服務器罰款後, 我們發現問題是一箇舊版本的MySQL客戶端我們 web服務器上運行,以及最新版本的MySQL服務器的 數據庫服務器的運行框中。 [source]

+0

我知道這個多查詢問題。然而唯一有多條語句的地方是這個選項:'PDO :: MYSQL_ATTR_INIT_COMMAND =>「SET NAMES utf8; SET CHARACTER_SET_DATABASE ='utf8'; SET TIME_ZONE ='Europe/Kiev'」'。 –

+0

更新了答案。 MySQL客戶端庫是我在看到這個錯誤時看到的唯一的其他問題。 – Sammitch

+6

不要對他無禮,他從未說過他認爲2014年是一年,他認爲現在是時候遷移到PDO。 – FMaz008