2013-08-06 8 views
2

Я не знал, что существует способ OO для использования mysqli, поэтому я построил класс под названием DB. Во время __construct он принимает имя хоста, имя пользователя, пароль и имя базы данных. Учитывая следующий код:Ошибка подключения к базе данных в классе

$myDB = new DB("localhost", "user", "password", "database"); 
$myDBConnect = $myDB->connect(); 

if(!$myDBConnect) { 
    echo "<strong>The following error has occurred: " . $myDB->getError(); 
} 

переменный, очевидно, содержит FALSE, потому что это if заявления в настоящее время возвращается TRUE. Вот метод из класса DB:

public function connect() { 
    // Create connection 
    $this->dbConnx = mysqli_connect($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName); 

    if(mysqli_connect_errno($this->dbConnx)) { 
     $this->dbError = mysqli_error($this->dbConnx); 
     return false; 
    } 
} 

У меня нет деталей ошибок. Я попытался добавить or die(mysqli_error()); в метод connect, но он всегда просто выводит текст из файла, в который создается экземпляр $ myDB. Я также пробовал варианты кода сообщения об ошибках, включая отсутствие аргумента в mysqli_connect_errno() и использование $this->dbError = mysqli_connect_error() с соединением и без него аргумент.

Это излишне усложняет способ OO использовать mysqli? или я пропущу что-то простое, что позволит мне перейти на код, который у меня уже есть? Заранее благодарим за ваше время.

+0

Я удалил errant $ перед оператором 'if' в соответствии с @echo_Me. Это не было в фактическом коде, просто мой пост. – armadadrive

+0

Я должен добавить, что файл error_log не создается ... это должно быть так, как я пытаюсь получить информацию об ошибке. – armadadrive

ответ

1

Может быть, вы забыли возвратную истинное утверждение в методе "подключения"?

Также вы должны использовать PDO.

+1

Почему PDO? Просто потому что, или есть еще причина? – Sven

+0

Мое понимание этого заключается в том, что запрос возвращает данные, если они успешны, и 'false', если нет. Я не верю, что мне придется возвращать 'true', потому что я действительно хочу, чтобы содержимое запроса в переменной после успешного вызова. – armadadrive

+1

Метод «connect» возвращает false только в случае сбоя. Если нет, возвращается null, потому что каждое возвращаемое значение по умолчанию метода равно null. Таким образом, ваше "if" -statement всегда будет правдой. –

2

если не переменная

 if(!$myDBConnect) { 
     ^--remove variable sign here 

EDIT:

ваше соединение должно быть

$myDB = new mysqli("localhost", "user", "password", "database"); 
+0

Извините, я, должно быть, добавил, что по ошибке - его нет в коде. – armadadrive

+0

@armadadrive проверить измененный ответ –

+0

Это работает. Мой класс работал и раньше, я не уверен, что произошло. Ну, может быть, это было немного избыточно. Я собираюсь сделать еще немного чтения, но отметю, что это правильно, если это то, что решает проблему. :) Благодаря! – armadadrive

1

Функция connect() возвращает false при сбое и ничего не работает, поэтому всегда будет сбой if. Попробуйте добавить return true; в конце этой функции.

+0

Спасибо. Я на самом деле просто удалил переменную и вызвал метод connect самостоятельно. Это был результат метода запроса (не показан), в котором я хотел выполнить проверку подлинности/ложности. Думаю, моя проблема заключалась в мозговом обжаривании. Нужно отступить на несколько часов. – armadadrive

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