2013-02-27 234 views
0

任何人都可以看到爲什麼下面的代碼不工作?是否因爲不贊成的sql語法?我被這個難住了。php/mysql數據庫搜索

<?php 
mysql_connect("localhost",$username,$password); 
@mysql_select_db($database) or die("Unable to select database"); 

$usersearch=$_POST['search']; 
$query="SELECT * FROM tracks WHERE 'artist' LIKE '%$usersearch%'"; 
$result=mysql_query($query); 

$num=mysql_numrows($result); 

mysql_close(); 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 

echo $row["artist"]." | ".$row["name"]; 
echo "<br>"; 

} 

?> 
+0

什麼不起作用?你有沒有檢查你的錯誤日誌?你會得到什麼錯誤?你採取了哪些步驟來解決這個問題? – 2013-02-27 15:14:27

+1

首先,不要使用'@',這是一個不好的習慣。另請註明,你得到了什麼輸出。你有沒有試過print_r($ row);?它說什麼?最後,是的,mysql_已被棄用,但它仍然有效,雖然 – 2013-02-27 15:15:30

+0

約翰,這是一個學校項目 - 我知道這是行不通的,因爲當我從數據庫中鍵入列出的藝術家到搜索框時,它只是返回一個空白頁。什麼是錯誤日誌? – maccame 2013-02-27 15:16:44

回答

0

添加到頁面頂部:

error_reporting(E_ALL); 
ini_set("display_errors", 1); 

,並在瀏覽器中打開頁面。有沒有錯誤?

變化(這靜音錯誤)

@mysql_select_db($database) or die("Unable to select database"); 

到:

mysql_select_db($database) or die("Unable to select database"); 

一句忠告不過,最好使用MySQLi或[PDO_MYSQL] [3],而不是mysql_connect因爲它會很快就會被棄用:

警告

此擴展從PHP 5.5.0開始已棄用,並且將來會被刪除。相反,應該使用MySQLi或PDO_MySQL擴展。另請參閱MySQL:選擇API指南和相關FAQ以獲取更多信息。替代該功能包括:

mysqli_connect()

你可以找到如何使用它們this answer更多信息。

UPDATE

檢查,如果你得到一個空的結果,添加:

$num=mysql_numrows($result); 
if ($num === 0) echo "Empty result" 

,並再次打開該網頁。如果頁面仍是空白,改變:

echo $row["artist"]." | ".$row["name"]; 
echo "<br>"; 

到:

vardump($row); 

更新2

如果你沒有得到Empty result,不是增加

echo $query; 

,並嘗試打開頁面並手動運行查詢

+0

謝謝,我做了更改 - 沒有報告錯誤 - 只是一個白色的屏幕 – maccame 2013-02-27 15:23:18

+0

你正在使用哪個PHP版本?回答更新,檢查出來.. – Kuf 2013-02-27 15:26:40

+0

Kuf,我不知道哪個PHP版本是在學校服務器上?我得到一個空的結果返回? – maccame 2013-02-27 15:28:40

1

可能是因爲您在選擇表格時有單引號(')而不是'。正如所指出的那樣,不要使用mysql_ *使用PDO或mysqli,即使它只是一個學校項目(舊習慣難改)。你還可以添加

mysql_query($query) or die($mysql_error()); 

這可能會指出什麼是錯..

和最後,請逃脫動態輸入變量

+0

sgulseth - 你修好了!這是藝術家周圍的引號 - 我把它們帶出去了,它的搜索,許多人都非常感謝每個人的建議。 – maccame 2013-02-27 15:53:29