2011-11-30 48 views
0

我已經在一段時間裏對PHP進行了一些清理,自從我上次用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());幾乎所有我能看到的錯誤,並說:

無法執行查詢。原因是:沒有數據庫選擇

我真的不知道爲什麼它不會工作,我已經擺弄了很長一段時間了。幫助是最受歡迎的,我提前感謝你!

電賀

檸檬

+1

既然你已經離開了PHP一段時間,你應該谷歌PDO。 – alex

+0

對不起,但在您的數據庫類中,我沒有看到您將vars定義爲$ dbhost或$ dbuser的位置。在你沒有的情況下,if將永遠是假的,所以你既不會得到連接也不會死()。 –

+0

@AurelioDeRosa:他說正在建立連接,如果你看他的代碼,只有在這些變量都設置好的情況下才能建立連接。 – Cyclone

回答

2

你在你的功能不具有值設置使用的值。您可能需要將使用的變量轉換爲$this->dbName等,或者將值分配給所使用的變量。關於config.php定義的變量

編輯用戶評論:

你真的應該嘗試獲取的數據適合該類內的每個類。最終,您的變量可用於您的整個應用程序,但目前還不知道該變量是否被文件更改,包括config.php,但調用database.php之前。

我會使用一個調試工具,並驗證變量的值或只是var_dump()他們在調用之前。

+0

大概它們是在'config.php'中定義的......如果你注意到,它包含在'database.php' – Cyclone

+0

^之前,它們在config.php – Citroenfris

+0

然後我會確保它們在' config.php'。最可能的原因是'isset()'檢查失敗,並且'mysql_select_db'函數未被調用。 – cspray

0

您的數據庫類方法connect和selectDb嘗試讀取未設置的變量($ dbhost,$ dbname,$ con等)。您可能想要將這些值傳遞給構造函數,並將它們設置爲類屬性。更好的是,查看PDO(或ORM)並忘記創建自己的db類。

+0

我不認爲他應該忘記製作數據庫課程。製作MySQLi/PDO連接包裝是非常簡單的,並且可以是一個很好的學習體驗。 雖然他應該考慮一下'mysql_'的替代方法。 – cspray

+0

@CharlesSprayberry你可能是對的。但是,在我看來,他的數據庫類沒有提供PDO已經提供的任何改進。對他來說更有用的是創建一個db連接管理器類(處理pdo對象)。但是,我想這一切都取決於他想要實現的目標。 –