PHP и PDO: может подключаться к БД; не могу запросить - PullRequest
0 голосов
/ 30 ноября 2010

Похоже, я могу подключиться к своей базе данных с помощью PDO, но не могу выполнить какие-либо запросы с ним.Пример:

 private function connect() {
      try {
           $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass);
      }
           catch (PDOException $e) {
           die ($e);
      }
      print_r($link);
      $result = $link->query("select * from mt3_users");
      var_dump($result);
      $row = $result->fetch($result);
      die("Your id is: ".$row["id"]);
      //$link = mysql_connect($this->sHost, $this->sUser, $this->sPass);
      if (!$link) {
          echo "Failed to connect to $this->sHost!";
          return false;
      }
      return $link;
 }

Возвращает следующее:

PDO Object () bool (false) Фатальная ошибка: вызов функции-члена fetch () для необъекта вDatabase.php в строке 32

Таким образом, в основном $ link возвращается как объект PDO (я изменил свое имя пользователя и пароль, чтобы увидеть, было ли обнаружено исключение; это было) и PDOConnection :: Queryвозвращает ноль по какой-то причине.Я впервые имею дело с PDO - я делаю что-то смешное?

Ответы [ 4 ]

0 голосов
/ 30 ноября 2010

Чтобы получить ошибку в вашем запросе:

$result = $link->query(...);
if($result===FALSE){
   print_r( $link->errorInfo);
   exit();
}

// the correct way to fetch one row
$link->fetch(PDO::FETCH_ASSOC); // or whatever way you want to fetch data
0 голосов
/ 30 ноября 2010

Вы можете попробовать

 private function connect() {
 try {
   $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
 return $link ;
 }
 catch (PDOException $e) {
 die ($e);
 }
}
$pdolink = $this->connect(); 
$rows = $pdolink->query("select * from mt3_users");
foreach($rows as $row ){
   echo("Your id is: ".$row["id"]);
 } 

и если вам нужно придерживаться функции fetchAll

  private function connect() {
     try {
       $link = new PDO("mysql:host=$this->sHost;dbname=$this->sName", $this->sUser, $this->sPass); 
     return $link ;
     }
     catch (PDOException $e) {
     die ($e);
     }
    }
    $pdolink = $this->connect(); 
    $q = $pdolink->prepare("select * from mt3_users");
    $q->exectue();
    $rows = $q->fetchAll();
    var_dump($rows);
    foreach($rows as $row ){
       echo("Your id is: ".$row["id"]);
     } 
0 голосов
/ 30 ноября 2010

Array ([0] => 00000 [1] => 1046 [2] => База данных не выбрана) Array ()

Думаю, не важно.Оказывается, что при переходе от использования обычных функций MySQL я не устанавливал $ this-> sName ($ this-> sName был нулевым. Я наполовину удивлен, что он не выдал исключение. Хотя только наполовину)

Исправлено.

Но спасибо, ребята, за ответы:)

0 голосов
/ 30 ноября 2010

Скорее всего, запрос не выполнен, вы уверены в названии таблицы mt3_users и что выбрали правильную базу данных? Это сообщение об ошибке показывает, что $result не является объектом, и это связано с ошибкой в ​​запросе.

Также:

$row = $result->fetch($result);

должно быть

$row = $result->fetch();

, если вы не хотите указать опции для fetch(), но вы не передаете объект в качестве аргумента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...