2013-07-24 70 views
-2

我已經成功地使用PHP編寫了搜索引擎,使用php代碼搜索

經過測試,有一件事情讓我困擾。

第一個錯誤

(mysql_fetch_array() expects parameter 1 to be resource, boolean given in) 

二錯誤

(mysql_num_rows() expects parameter 1 to be resource, boolean given in) 

很抱歉,但我們無法找到一個條目,以符合您查詢......

這裏的代碼

<?php 

echo "<h2>Search Results:</h2><p>"; 

//If they did not enter a search term we give them an error 
if ($find == "Account_Number") 
{ 
echo "<p>You forgot to enter a search term!!!"; 
exit; 
} 

// Otherwise we connect to our Database 
mysql_connect("localhost", "username", "password") or die(mysql_error()); 
mysql_select_db("database") or die(mysql_error()); 

// We perform a bit of filtering 
$find = strtoupper($find); 
$find = strip_tags($find); 
$find = trim ($find); 

//Now we search for our search term, in the field the user specified 
$data = mysql_query("SELECT * FROM memaccounts WHERE upper($field) LIKE'%$find%'"); 

//And we display the results 
while($result = mysql_fetch_array($data)) 
{ 
echo $result['Account_Number']; 
echo $result['Name']; 
echo "<br>"; 
echo $result['Balance']; 
echo "<br>"; 
echo "<br>"; 
} 

$anymatches=mysql_num_rows($data); 
if ($anymatches == 0) 
{ 
echo "Sorry, but we can not find an entry to match your query...<br><br>"; 
} 

//And we remind them what they searched for 
echo "<b>Searched For:</b> " .$find; 
//} 
?> 

拜託他lp,謝謝

+8

*旁註:*停止使用廢棄的'mysql_ *'功能。改用MySQLi或PDO。 – Raptor

+0

您的查詢失敗。 –

+3

如果您的第一個查詢失敗,您如何「成功」編寫了搜索引擎? – GolezTrol

回答

0

由於$find$field沒有定義,查詢變爲:

SELECT * FROM memaccounts WHERE upper() LIKE'%%' 

這使得mysql_query()返回FALSE,因爲它是不正確的查詢。 (即,$dataFALSE)。因此,mysql_fetch_array()mysql_num_rows()因錯誤而失敗,因爲FALSE作爲輸入提供。

提示:

  • 正確濾波輸入,使用mysqli_real_escape_string()。順便說一下,如果您的表格整理不區分大小寫,則不需要將其更改爲大寫。

  • 您可以隨時var_dump()var_export()echoprint_r()(取決於情況)

  • 停止使用過時mysql_*功能調試代碼。改用MySQLi或PDO。

  • 您的代碼受到SQL注入攻擊,因爲您直接允許將POST值插入到您的查詢中。

+0

我應該在哪裏定義它? – Mhinne

+0

你當然必須給'$ find'和'$ field'賦值才能在查詢中使用它們。 – Raptor

+0

我已經給$的價值找到 – Mhinne

1

如果出現SQL錯誤,mysql_query()返回false。在循環結果之前,您必須檢查$ data是否爲false。對這樣的一個例子:

if (!$data) exit(mysql_error()); 

或只加「或死亡(mysql_error())」當你連接並select_db做在的mysql_query結束()行相同。

+0

+1用於檢查結果,但是這個答案並沒有說明爲什麼查詢首先失敗。 – GolezTrol

0

這很可能是您的查詢出錯。檢查是否有任何錯字。
我建議捕獲查詢(回顯或記錄),然後使用任何數據庫客戶端(如phpmyadmin或heidisql)運行它。

+0

我正在使用phpmyadmin – Mhinne

0

查詢可能會工作,除非$find包含無效字符。例如,如果它包含一個報價('),那麼它會打破你的查詢。

您可以使用mysql_real_escape_string來解決這個問題,但最好退出使用mysql *函數並切換到PDO。 mysql *函數已被棄用,並可能在將來的PHP版本中被刪除。

0
Please check the query. 
mysql_query() this function returns true or false to show query worked or not. 
your result shows boolean means query failed. 
use mysql_error() 
for ex :- 
$result=mysql_query('Your query'); 
if(!$res){ 
die(mysql_error()); //gives information regarding error 
} 
+0

請格式化您的答案。 'var_dump('select query');'不是一個有效的語法。 – Raptor