2013-12-20 5 views
0

У меня есть файл класса Connection, который позволяет моему другому классу «Функции» подключаться к моей базе данных MySQL. Однако, когда я выполняю запрос MySQL, он возвращается только с Array(). Данные, которые я выбираю, на самом деле там (я проверил). В чем проблема?PDO-запрос, возвращающий пустой

connection.php

<?php 

class Connection extends PDO { 

private $username; 
private $password; 
private $database; 
private $hostname; 

public function __construct($hostname, $username, $password, $database) { 

    $this->hostname = $hostname; 
    $this->username = $username; 
    $this->password = $password; 
    $this->hostname = $hostname; 

    try { 
     parent::__construct("mysql:host=" . $this->hostname . ";dbname=" . $this->database, $this->username, $this->password); 
    } 

    catch (PDOException $e) { 
     echo $e->getMessage(); 
    } 
    } 
} 

?> 

functions.php

<?php 

require_once "Connection.php"; 

class Functions { 

private $connection; 

public function __construct() { 
    $this->connection = new Connection("127.0.0.1", "xxx", "xxx", "xxx"); 
} 

public function sqlFetchAssoc($query) { 

    $sth = $this->connection->prepare($query); 
    $sth->execute(); 
    $result = $sth->fetchAll(PDO::FETCH_ASSOC); 

    return $result; 
    } 
} 

$functions = new Functions(); 
$row = $functions->sqlFetchAssoc("SELECT * FROM chatlogs WHERE id = 70"); 

print_r($row); 

?> 
+0

Вы должны добавить еще одну ошибку. Посмотрите, где-то вы получаете ошибку. –

+1

Почему бы вам просто не использовать объект PDO как есть? –

+0

http://www.php.net/manual/en/pdo.errorinfo.php –

ответ

0

Я просто заметил ваш ошибка в Connection.php:

$this->hostname = $hostname; 
$this->username = $username; 
$this->password = $password; 
$this->hostname = $hostname; 

$this->hostname повторяется в то время как $this->database не установлен. Однако вы можете полностью удалить $this->something, так как вы используете эти значения в одной и той же функции. Это упростит:

try { 
    parent::__construct("mysql:host=" . $hostname . ";dbname=" . $database, $username, $password); 
} 

Я бы рекомендовал сделать шаг дальше. Вы должны тест каждый класс отдельно. Вы можете написать этот сценарий и отладка его (при необходимости) в testfunction.php:

<?php 
class Functions { 
private $connection; 

public function __construct() { 
    $this->connection = new PDO("mysql:host=127.0.0.1;dbname=xxx", "xxx", "xxx"); 
} 

public function sqlFetchAssoc($query) { 

    $sth = $this->connection->prepare($query); 
    $sth->execute(); 
    $result = $sth->fetchAll(PDO::FETCH_ASSOC); 

    return $result; 
    } 
} 

echo "Test started <br><br>"; 
echo "Initialization: <br>"; 
$functions = new Functions(); 
echo "Correct<br><br>"; 
echo "Performing a select: <br>"; 
$row = $functions->sqlFetchAssoc("SELECT * FROM chatlogs WHERE id = 70"); 
print_r($row); 
echo "Test finished."; 
?> 

Затем сделать что-то подобное для первого класса. Тогда не только будет легче обнаружить ошибку, но, если ошибка случится, вы можете прийти к этим тестам, чтобы понять, что пошло не так, вместо того, чтобы писать их снова. Не забудьте включить их в производственный код.

+1

Очень смущающая ошибка, действительно! Казалось, это исправить. Большое спасибо. – user2879373

+1

Если вы собираетесь повторно использовать этот код, я бы также по умолчанию установил 'charset = utf8'. Пожалуйста (: –

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