php пользовательский класс интерфейса БД - база данных не выбрана - PullRequest
0 голосов
/ 21 июля 2009

Я написал следующий класс интерфейса БД:

<?php

// dbinterface.php

class db {
    private $con;
    private $host;
    private $user;
    private $pass;
    private $database;
    private $error;

    function db($host, $user, $pass, $database) {
        $this->con = mysql_connect($host, $user, $pass);
        mysql_select_db($database);
    }

    function escape($text) {
        return mysql_real_escape_string($text);
    }

    function run($query) {
        $q = mysql_query($query);
        if ($q === false) {
            $this->error = "Error " . mysql_errno() . ": " . mysql_error($this->con);
            return false;
        } elseif ($q === true) {
            return true;
        } else {
            $result = array();
            while ($row = mysql_fetch_assoc($q)) {
                array_push($result, $row);
            }
            return $result;
        }
    }

    function get_error() {
        return $this->error;
    }

    function cose() {
        mysql_close($this->con);
    }
}


?>

Проблема в том, что по какой-то причине, когда я пытаюсь выполнить запрос с ним, я получаю ошибку: база данных не выбрана. Но мой код выбирает его в конструкторе. Я проверил и убедился, что передал правильное имя БД. и я удостоверился, что это действительно проходило.

Ответы [ 2 ]

1 голос
/ 21 июля 2009

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

function db($host, $user, $pass, $database) {
    if (($this->con = mysql_connect($host, $user, $pass)) === false) {
        throw new Exception(mysql_error());
    }
    if (!mysql_select_db($database)) {
        throw new Exception(mysql_error());
    }
}
0 голосов
/ 21 июля 2009

Этот класс хорошо работает для меня ... хотя вы определенно должны делать больше проверок на ошибки. Вы можете получить сообщение об ошибке «База данных не выбрана», если указать базу данных, которая не существует, поэтому я буду искать ее дальше.

EDIT: проверить возвращаемое значение mysql_select_db () и вызвать ошибку или выдать исключение, если оно не возвращает true.

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