2011-06-28 66 views
0

我的代碼是繼IAM得到一個錯誤「警告:mysql_num_rows():提供的參數不是一個有效的MySQL結果資源......」幫我解決這個錯誤的mysql_num_rows

<?php 
$type = $_REQUEST['type']; 

#defauts 
$maxRows_p = 10; 
$pageNum_p = 0; 
if (isset($_GET['pageNum_p'])) { 
    $pageNum_p = $_GET['pageNum_p']; 
} 
$startRow_p = $pageNum_p * $maxRows_p; 
$limit = ' LIMIT '.$startRow_p.', '.$maxRows_p; 



//BUILD Addition Search Conditions 
if(isset($_REQUEST['district']) && ($_REQUEST['district'] != 'All')) 
    $search = ' district = '.$_REQUEST['district']; 

if(isset($_REQUEST['city']) && ($_REQUEST['city'] != 'All')) 
    $search = ' city = '.$_REQUEST['city']; 


$search= ' availibility = "0" '; 

$searchStr = @implode(' and ',$search);  

$sql = 'select * FROM properties WHERE type= "'.$type.'" and '; 
$sql .= $searchStr; 

## DEBUGi 
//if($debugP) echo 'Zip Code Radius SQL<hr>'.$sql; 

//Add column sorting 

if($_REQUEST['sort'] != '') 
    $sort = ' order by added asc '; 
else 
    $sort = $_REQUEST['sort']; 

### DEBUG 
if($debugP) echo 'Advanced Search Sql<hr>'.$sql; 

$error['Results'] = 'Sorry no properties found.'; 



### Finished Building search sql and execting ##### 
$sql_with_limit = $sql . $sort . $limit; 


if($debugP) 
    echo "<hr>Property Search with Limit SQL: $sql_with_limit";  

//Perform search 
$searchResults = mysql_query($sql.$sql_with_limit); 

### BUILD OUTPUT #### 

if (isset($_GET['totalRows_p'])) { 
    $totalRows_p = $_GET['totalRows_p']; 
} else { 
    if($debugP) 
     echo "<hr>Property with out limit SQL: $sql $sort"; 
    $all_p = mysql_query($sql.$sort); 
    $totalRows_p = mysql_num_rows($all_p); //$totalRows_p = mysql_num_rows($all_p); 
    if($debugP) 
     echo "<br>Result Rows $totalRows_p"; 
} 
$totalPages_p = ceil($totalRows_p/$maxRows_p)-1; 


if($debugP) 
    echo "<hr>Builting Query String for Limit: "; 

//Build query string 
foreach($_GET as $name => $value){ 
    if($name != "pageNum_p") 
     $queryString_p .= "&$name=$value"; 
} 

if($debugP) 
    echo $queryString_p;      
?> 
+1

祈禱,你不會從[Bobby Tables](http://xkcd.com/327/)訪問。此代碼尖叫SQL注入。另外,在'mysql_query()'之後請教['mysql_error()'](http://php.net/manual/en/function.mysql-error.php)。 –

+0

看起來像你試圖使用「$搜索」變量作爲數組...但它實際上是一個變量....所以內爆不應該工作,這可能會導致問題。將$ search替換爲$ search [] – YonoRan

回答

0

這可能是因爲MySQL無法處理您提供的SQL語句。 試着改變你的mysql_query線以下,讓你得到一些調試信息, 只是嘗試下面的代碼爲您的查詢

$all_p = mysql_query($sql.$sort) or die('Query failed: ' . mysql_error() . "<br />\n$sql"); 

感謝名單。

+0

iam獲取以下錯誤 查詢失敗:您的SQL語法有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在第1行的''附近使用正確的語法select * FROM properties WHERE type =「0」and – nala

+0

ok ..我想我知道了,您的查詢是** select *從屬性WHERE類型=「0」和**,但在'和'之後,你已經把**排序變量的** ORDER BY **語句..所以對於ORDER BY語句,你不需要在type =「0」 ..只是刪除**'和'**然後再試一次.. – Chandresh

+0

如果你想把**之後的搜索變量**條件,那麼你需要把**和**只在該字符串中。不在這裏**之後**條件** thx。 – Chandresh

0

我認爲你的問題是在這裏:

 $all_p = mysql_query($sql.$sort); 
    $totalRows_p = mysql_num_rows($all_p); 

從你得到$ all_p不是一個有效的資源信息。這可能是由於您傳遞的查詢中存在錯誤

您是否嘗試過這樣做?

 $all_p = mysql_query($sql.$sort); 
    if ($all_p !== false){ 
     $totalRows_p = mysql_num_rows($all_p); 
    } 

如果您看不到任何警告,說明您的查詢存在問題,應該調試該問題。嘗試在MySQL中執行你的查詢,並查看是否返回任何結果。

+0

我試圖通過取代你的主張,但現在沒有任何結果顯示 – nala

+0

這意味着您的查詢有錯誤。 這裏喲回聲您的查詢:'回聲「


與超出限制SQL的屬性:$ sql $ sort」;'您是否試圖運行您的查詢到mysql? –

+0

是的,但沒有結果 – nala

0

當您想要分配數組時,您正在使用直接分配$search。這意味着當你去爆炸它時,它可能會返回false(???我從來沒有壓制過內在的警告,我不知道那是什麼)。附加到$ sql時會被誤讀。然後,將$ sort和$ limit附加到$ sql,然後在調用mysql_query之前再次預先安裝$ sql以獲得較好的度量。你還沒有檢查$ _REQUEST ['city']和$ _REQUEST ['desitination']是否有值。

你的最終結果(最壞情況):

select * FROM properties WHERE type= "'.$type.'" and select * FROM properties WHERE type= "'.$type.'" and order by added asc Limit 0,10 

你的最終結果(最好的情況下):

select * FROM properties WHERE type= "'.$type.'" and city = 'Atlanta' select * FROM properties WHERE type= "'.$type.'" and city = 'Atlanta' order by added asc Limit 0,10 

頂部補充一點:

$search = array(); 

,然後任何你想追加的時間$search

$search[] = ' district = '.$_REQUEST['district']; 

而替換該行$searchResults = mysql_query($sql.$sql_with_limit);有:

$searchResults = mysql_query($sql_with_limit); 

BTW你乞討SQL注入這裏。無論何時您從$_REQUEST中提取值,都應該使用mysql_real_escape_string