0

私のコードは、「警告:mysql_num_rows():指定された引数は有効なMySQL結果リソースではありません...」というエラーが表示されるに従っています。これを解決するのに役立ちます

<?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;                    
?>
4

3 に答える 3

0

これは、MySQLが提供されたSQLステートメントを処理できなかったことが原因である可能性があります。mysql_query行を次のように変更して、デバッグ情報を取得してみてください。クエリの以下のコードを試してください。

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

ありがとう。

于 2011-06-28T11:03:50.643 に答える
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でクエリを実行して、結果が返されるかどうかを確認してください。

于 2011-06-28T11:04:58.220 に答える
0

$search配列の割り当てが必要な場合は、直接割り当てを使用しています。これは、内破しようとすると、おそらく false を返すことを意味します(??? 私は内破に関する警告を抑制したことはありません。それが何をするのかわかりません)。$sql に追加すると、それが読み違えられています。次に、$sql に $sort と $limit を追加し、mysql_query を呼び出す前に、適切な手段として $sql を再度先頭に追加します。$_REQUEST['city'] と $_REQUEST['destination'] に値があるかどうかもチェックしていません。

最終結果 (最悪の場合):

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); 

ところで、ここで SQL インジェクションを懇願しています。から値を取得するときはいつでも$_REQUEST、 を使用する必要がありますmysql_real_escape_string

于 2011-06-28T11:12:19.683 に答える