2014-10-03 53 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