2013-11-01 49 views
0

我試圖在一個函數內執行查詢,但它返回「沒有選擇數據庫」。我經常都重新初始化PDO對象裏面功能內沒有選擇數據庫,PDO的解決方案是什麼?

$db = "mysql:host=localhost;dbname=my_database"; 
$pdo = new PDO($db, 'dbname', 'dbpassword'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
//some operations.. Works fine! 

function sendMail($to) 
    { 
     $db = "mysql:host=localhost;dbname=my_database"; 
     $pdo = new PDO($db, 'dbname', 'dbpassword'); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $qryString="SELECT Codice FROM users WHERE Mail=:mail"; 
     $qry = $pdo->prepare($qryString); 
     $params = array("mail" => $to); 
     $qry->execute($params); //won't work 
    } 

需要注意的是在功能之外的DB操作工作正常。

的問題是,該代碼將無法正常工作既不通過全球$ PDO對象。 這是實際的碼

$db = "mysql:host=localhost;dbname=my_database"; 
$pdo = new PDO($db, 'dbname', 'dbpassword'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

sendMail($mail, $pdo) 

function sendMail($to, PDO $pdo) 
     { 
      $qryString="SELECT Codice FROM users WHERE Mail=:mail"; 
      $qry = $pdo->prepare($qryString); 
      $params = array("mail" => $to); 
      $qry->execute($params); 
     } 
+0

複製的? [如何使一個函數內部PDO查詢工作](http://stackoverflow.com/questions/8181202/how-to-make-pdo-query-work-inside-a-function) –

+0

通'$ pdo'作爲你的函數的參數,或者使用'global $ pdo;'。 –

+0

alredy做到這一點,但無論兩部作品 – Sonia

回答

0

傳遞PDO對象的功能,因爲$pdo範圍的sendMail()範圍之外。

function sendMail(PDO $pdo, $to) { 
    $queryString = "SELECT Codice FROM users WHERE Mail=:mail"; 
    $statement = $pdo->prepare($queryString); 
    $params = array("mail" => $to); 
    $result = $statement->execute($params); 
} 

function sendMail($to) { 
    global $pdo; 
    $queryString = "SELECT Codice FROM users WHERE Mail=:mail"; 
    $statement = $pdo->prepare($queryString); 
    $params = array("mail" => $to); 
    $result = $statement->execute($params); 
} 
+0

已經tryied一點,但它給我同樣的錯誤。有兩個解決方案 – Sonia

+0

解決了同樣的錯誤,問題是在代碼的連續部分,我認爲已經排除 – Sonia

3

變量範圍有絕對無關,與數據庫連接的詳細信息。
如果你有其中選擇的數據庫,如果你使用的是函數內部這一點上,同一個數據庫將被選中的連接。

所以,這是太本地化問題的一個明確的情況下,這個問題是很明顯的錯字樣 - 連接到數據庫錯誤,拼寫錯誤的變量名,數據庫名和這樣。

不幸的是,普通PHP有權對執行正確,reproduceable實驗來證明自己的假設知之甚少。相反,他們通過間接的後果來猜測原因。

您只需要即可編寫您告訴我們的關於的代碼,並查看該數據庫是否正確選中。然後轉而尋找真正的理由。完整的錯誤報告(E_ALL)通常有很大幫助。

+0

有在那個困惑我對沒有數據庫的選擇起源碼連續部分的錯誤。我是相當肯定已經把退出的代碼之前.. 感謝您的幫助,現在一切都解決了 – Sonia

+0

這就是爲什麼你不應該使用tr..catch顯示錯誤信息 –

相關問題