无法在PHP中将$ db作为全局变量传递

时间:2014-10-03 04:44:45

标签: php mysql pdo

我想知道为什么我不能在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

我收到此错误

  

捕获致命错误:类PDO的对象无法转换为字符串

我可以用两种方式解决它

  1. 不要使用任何绑定的params(这里显然没用)
  2. $db传递给函数
  3. 有什么问题? execte()发生错误。我可以在它之后移除任何东西,但仍然会出错。

1 个答案:

答案 0 :(得分:0)

所以$ rowID包含一个对象。

execute函数尝试将Message对象转换为字符串,但发现没有声明__toString函数。

所以要么声明

public function __toString() {
   return $the_string;
}

或创建另一个可以传递给execute函数的公共函数/成员。