2014-10-03 54 views
-1

我想知道爲什麼我無法在PHP中執行此操作。

db.php中

function db_connect(){ 
    try { 
     $db = new PDO('xxxxxxxx'); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
    return $db; 
} 

FUNCTION.PHP

require_once('db.php'); 
$db = db_connect(); 

//Incoming AJAX request 

if(isset($_POST['rowId'])) $rowId = $_POST['rowId']; 
if(isset($_POST['func'])){ 
    $func = $_POST['func']; 
    switch($func){ 
     case "info": 
      echo json_encode(info($rowId)); 
     break; 
    } 
} 

function info($rowId){ 
    global $db; 
    $rowInfo = $db->prepare("SELECT name FROM table WHERE id = :rowId"); 
    $rowInfo->bindParam(':rowId', $rowId); 
    $rowInfo->execute(); 
//do more stuff 

我得到這個錯誤

Catchable fatal error: Object of class PDO could not be converted to string

我能解決這個問題兩種方式

  1. 不要使用任何約束PARAMS(這顯然是沒用這裏)
  2. $db到函數

問題是什麼?該錯誤發生在execte()上。我可以刪除任何東西,但仍然會出現錯誤。

+0

您還需要在全局範圍內分配'$ db'。您的摘錄中沒有任何內容沒有斷言這是包含「functions.php」的地方。 – mario 2014-10-03 04:46:33

+2

@mario他有'$ db = db_connect();',它將它分配到全局範圍中。 – Barmar 2014-10-03 04:48:12

+2

錯誤消息表明變量IS設置爲PDO對象,但您在需要字符串的地方使用它,如'echo $ db;'。有哪些錯誤發生? – Barmar 2014-10-03 04:49:22

回答

0

因此$ rowID包含一個對象。

execute函數嘗試將Message對象轉換爲字符串,但發現沒有聲明__toString函數。

因此,無論申報

public function __toString() { 
    return $the_string; 
} 

或創建另一個公共功能/會員,你可以傳遞給執行功能。

+0

但是爲什麼我可以通過將$ db作爲參數傳遞給函數來解決這個問題? – Tester232323 2014-10-03 21:59:28

+0

此外,我從來沒有任何傳遞$ _POST var的問題。它已經是一個字符串了,至少它被接受爲一個字符串。 – Tester232323 2014-10-03 22:23:06