Проблема выбора базы данных PHP - PullRequest
0 голосов
/ 30 ноября 2011

Я немного расстроен тем, что немного освежил свой PHP, прошло уже около 3 лет с тех пор, как я последний раз программировал на PHP.Любые идеи приветствуются!Я дам вам как можно больше информации, чтобы исправить эту ошибку, так что вот так!

Файлы

  • config.php
  • database.php
  • news.php
  • BLnews.php
  • index.php

Включает

  • config.php -> news.php
  • database.php -> news.php
  • news.php -> BLnews.php
  • BLnews.php -> index.php

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

config.php

<?php
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "test";
?>

database.php

<?php
class Database {

    //-------------------------------------------
    //    Connects to the database
    //-------------------------------------------
    function connect() {
        if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($dbname)) {
            $con = mysql_connect($dbhost, $dbuser, $dbpass) or die("Could not connect: " . mysql_error());
            $selected_db = mysql_select_db($dbname, $con) or die("Could not select test DB");
        }
    }// end function connect
} // end class Database
?>

News.php

<?php
// include the config file and database class
include 'config.php';
include 'database.php';

...
?>

BLnews.php

<?php
// include the news class
include 'news.php';
// create an instance of the Database class and call it $db
$db = new Database;
$db -> connect();

class BLnews {

    function getNews() {
        $sql = "SELECT * FROM news";
        if (isset($sql)) {
            $result = mysql_query($sql) or die("Could not execute query. Reason: " .mysql_error());
        }
        return $result;
    }
?>

index.php

<?php
...

include 'includes/BLnews.php';
$blNews = new BLnews();
$news = $blNews->getNews();
?>

...
<?php 
        while($row = mysql_fetch_array($news))
        {
        echo '<div class="post">';
        echo '<h2><a href="#"> ' . $row["title"] .'</a></h2>';
        echo '<p class="post-info">Posted by <a href="#"> </a> | <span class="date"> Posted on <a href="#">' . $row["date"] . '</a></span></p>';
        echo $row["content"];
        echo '</div>';
        }
        ?>

Ну, это в значительной степени все, что должно получить информацию, однако из-за mysql_error в $result = mysql_query($sql) or die("Could not execute query. Reason: " .mysql_error()); Я вижу ошибку и она говорит:

Не удалось выполнить запрос.Причина: база данных не выбрана

Честно говоря, я понятия не имею, почему это не сработает, и я уже довольно долго возился с ней.Помощь очень приветствуется, и я заранее благодарю вас!

Привет

Лимон

Ответы [ 2 ]

2 голосов
/ 30 ноября 2011

Значения, которые вы используете в своих функциях, не имеют значения.Скорее всего, вам нужно преобразовать используемые переменные в $this->dbName и т. Д. Или иным образом назначить значения используемым переменным.

Редактировать для пользователей комментарий о переменных, определенных в config.php:

Вы действительно должны попытатьсячтобы получить данные, соответствующие каждому классу внутри этого класса.В конечном счете, ваши переменные доступны для всего вашего приложения, на данный момент невозможно сказать, была ли переменная изменена файлом, включающим config.php, но до вызова database.php.

Я бы использовал инструмент отладки и проверилзначения переменных или просто var_dump() их перед вызовом.

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

Ваши методы класса Database подключаются и selectDb пытаются читать из не установленных переменных ($ dbhost, $ dbname, $ con и т. Д.). Возможно, вы захотите передать эти значения конструктору и установить их как свойства класса. А еще лучше загляните в PDO (или ORM) и забудьте о создании собственного класса БД.

...