2014-10-03 2 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. Pass $db в функцию

В чем проблема? Ошибка возникает на execte(). Я могу удалить что-нибудь после него и все еще получить ошибку.

+0

Вам нужно также присвоить '$ db' в глобальной области. Ничто в ваших отрывках не утверждает, что именно здесь включен 'functions.php'. – mario

+2

@mario У него есть '$ db = db_connect();', который присваивает его в глобальной области. – Barmar

+2

Сообщение об ошибке указывает, что переменная IS установлена ​​в объект PDO, но вы используете ее в месте, где требуется строка, например 'echo $ db;'. Что на линии, которая получает эту ошибку? – Barmar

ответ

0

Так что $ rowID содержит объект.

Функция execute пытается преобразовать объект Message в строку, но обнаруживает, что функция __toString не объявлена.

Так либо объявить

public function __toString() { 
    return $the_string; 
} 

или создать другую общественную функцию/элемент, который можно передать в функцию выполнения.

+0

Но почему я могу разрешить это, передав $ db в функцию как параметр? – Tester232323

+0

Кроме того, у меня никогда не было проблем с передачей переменной $ _POST. Это строка уже или, по крайней мере, она принимается как одна. – Tester232323

Смежные вопросы