2011-10-05 31 views
0

我終於從MS Access畢業了到MySQL。不幸的是,我甚至無法獲得正確的查詢。有人可以告訴我有什麼問題嗎?我不斷收到我在php中指定的'無效查詢'消息。PHP + MySQL查詢 - >這個SQL有什麼問題(簡稱)

<?php 
@ $db = mysql_connect('localhost', 'root', 'root', 'newdatabase'); 
if (!$db) { 
    die ('Failed to connect to the database.'); 
} 


$query = "SELECT first FROM demographics"; 
$result = mysql_query($query); 

if (!$result) { 
    die('invalid query'); 
} 

while ($row = mysql_fetch_assoc($result)) { 
    echo $row['first']; 
} 

?> 

此外,這本書我讀告訴我使用方法:

new mysqli('localhost', 'root', 'root', 'newdatabase') 

來,而不是連接到

mysql_connect 

我在上面的代碼中使用。我一直無法連接到數據庫與新mysqli。我使用哪一個是否重要?

+0

請爲代碼使用代碼塊而不是引用塊,因爲代碼塊可啓用語法着色。 –

+0

PHP有3種不同的訪問mysql的方式。 mysqli類/函數,mysql函數和PDO類。 PDO通常是推薦的選擇。 – dqhendricks

+0

另請注意,對於想要使用MySQLI擴展的新代碼,不要使用MySQL擴展。 MySQL擴展僅爲了與(古代)MySQL 3.x數據庫兼容而被維護。 MySQL 4.x引入了MySQLI API(甚至4.x現在真的很老) –

回答

3

mysql_connect()的第四個參數不是數據庫名稱。它是一個布爾值,指定是否建立一個新的連接或使用現有連接。大多數情況下,它被省略。使用mysql_select_db()來選擇數據庫。由於您未在代碼中選擇數據庫,因此您的查詢可能失敗。

$db = mysql_connect('localhost', 'root', 'root'); 
if (!$db) echo mysql_error(); 
else mysql_select_db("database"); 

注意我已刪除從mysql_connect()呼叫@@可以防止錯誤,並且可能會阻止您查看連接出了什麼問題。

當測試查詢的成功或失敗時,請勿die()。而是在開發應用程序時回顯出mysql_error()。在生產中,您可以通過寫入error_log()來代替echo

if (!$result) { 
    echo mysql_error(); 
} 

作爲使用庫MySQLi代替的基本功能mysql_*,庫MySQLi可以以面向對象的方式來使用,同時還提供準備的語句,這既可以是更有效地使用,更安全。正如上面評論中提到的,PDO經常被推薦爲用於與PHP交互RDBMS的最靈活的API。

+0

真棒,它工作!謝謝! – jerry

+0

@Jerry樂於幫助。祝你好運,你繼續。請務必閱讀SQL注入以及使用'mysql_real_escape_string()'。這與使用Access不同。 –

+0

謝謝邁克爾,我絕對會!有一個好的 – jerry