2012-03-29 73 views
1

这里是有问题的代码:的MySQL/phpMyAdmin的查询行数(1行)VS mysql_num_rows'伯爵(0行数)

<?php // If search option is selected 
include 'db_connect.php'; 

database_connect(); 
$limit = 5; // No of result per page 
$criteria = 1; // Search criteria 
$allResults=array(); // Array of results 
$searchOption = $_REQUEST['searchoption']; 
$searchField = $_REQUEST['searchfield']; 
$searchField = str_replace('+',' ', $searchField) ; 
$dbcolumn = "user_id"; 
$dbtable = "profiles"; 
$order = "user_id"; 

if ($searchField){ 
    if ($searchOption == "People"){ 
    $words = explode(' ', trim($searchField)); 
    $searchField = $words[0]; 
    $dbcolumn = "profile_display_name"; 
    $dbtable = "profiles P, user_roles U, roles R"; 
    $order = "profile_first_name"; 
    $criteria =  " P.user_id = U.user_id AND U.role_id = R.role_id 
        AND(`profile_display_name` LIKE '%$searchField%' 
        OR `profile_first_name` LIKE '%$searchField%' 
        OR `profile_last_name` LIKE '%$searchField%' 
        OR `profile_email` LIKE '%$searchField%' 
        OR `profile_state` LIKE '%$searchField%' 
        OR `profile_zip_code` LIKE '%$searchField%' 
        OR `business_summary` LIKE '%$searchField%')"; 
    } 
    //focus here folks (my comment to readers, not actual part of code 
    else if ($searchOption == "Jobs"){ 
    $dbcolumn = "job_title"; 
    $dbtable = "job_postings"; 
    $order = "`created_date` DESC"; 
    $criteria = "(`job_title` LIKE '%$searchField%' 
    OR `job_description` LIKE '%$searchField%' 
    OR `client_name` LIKE '%$searchField%' 
    OR `city` LIKE '%$searchField%' 
    OR `state_abbr` LIKE '%$searchField%' 
    OR `zipcode` LIKE '%$searchField%') 
    AND `job_status` = 'Open'"; 
    } 
    else if($searchOption == "News"){ 
    $dbcolumn = ""; 
    $dbtable = ""; 
    $order = ""; 
    $criteria = "1"; 
    } 

    //Pagination 
if($dbtable){ 
    $rs = mysql_query("SELECT * FROM $dbtable WHERE $criteria"); 
    $no_of_rec = mysql_num_rows($rs); 
    $page = ($_REQUEST['page'])? $_REQUEST['page'] : 1; 
    $no_of_pages = ceil($no_of_rec/$limit); 
    $offset = ($page - 1)*$limit; 

    echo "pagination #rows: $no_of_rec "; 
} 
} 

// If the user enters a value in the search 
if ($searchField){ 
    $resultcount = 0; 
    if($dbtable) { 
    // Search query executes 
    $query = "SELECT * FROM $dbtable WHERE $criteria "; 
    $query .= "ORDER BY $order "; 
    $query .= "LIMIT $offset, $limit"; 
    $result = mysql_query($query) or die(mysql_error()); 
    $resultcount = mysql_numrows($result); 

    echo "query: $query "; 
    echo "result: $result "; 
    echo "result count: $resultcount ";  
} 

if ($resultcount <= 0){ 
    $allResults[] = "No match found"; 
} 
else{ 
// Get search results from database 
    while ($row = mysql_fetch_array($result)){ 
$allResults[]=$row; 
    } 

} 
} 
    else{ 
    $allResults[] = "No value entered"; 
    } 
    ?> 

这里是回声报表显示: pagination #rows: 0 query: SELECT * FROM job_postings WHERE (`job_title` LIKE '%Help Wanted%' OR `job_description` LIKE '%Help Wanted%' OR `client_name` LIKE '%Help Wanted%' OR `city` LIKE '%Help Wanted%' OR `state_abbr` LIKE '%Help Wanted%' OR `zipcode` LIKE '%Help Wanted%') AND `job_status` = 'Open' ORDER BY `created_date` DESC LIMIT 0, 5 result: Resource id #36 result count: 0

(我留下回声打印输出,因此您可以看到我看到的以及我如何看到它)。

当我在MySQL和phpMyAdmin中运行查询时,我得到了我正在查找的行。

有人可以解释为什么mysql_numrows()认为有0个结果吗?

我检查过PHP.net,我也搜索了这个。到目前为止没有运气。

非常感谢。

+0

你检查mysql的错误录入错误? – 2012-03-29 18:51:29

+0

MySQL没有报告错误,或者你的意思是mysql_error()调用?我会怎么做呢?我还是PHP新手。 – Waddler 2012-03-29 19:11:14

+0

+1用于回显您的查询并直接在MySQL中测试查询,这是新提问者通常需要哄骗的两件事情。接下来的步骤是遵循tereško的建议并回应mysql_error()的结果来查看当PHP提交查询时mysql是否提供任何错误。您也可以尝试将简单的明确查询放入您的PHP脚本中,并查看它是否按预期工作。事实上,mysql_query()返回一个资源意味着你连接到你的数据库(我认为),但你仍然可以用一种不寻常的方式连接。 – octern 2012-03-29 19:43:43

回答

1

有这行

$resultcount = mysql_numrows($result); 

,你应该调用mysql_num_rows()

您可以使用此代码或者

$isExist = mysql_query("Select count(id) from ..."); 
$r = mysql_fetch_array($isExist); 
if($r['COUNT(id)'] > 0){ 
//item exists 
}else{ 
//item doesnt exist 
} 
+0

Ali_D:我同意我需要进行更改,我不同意这是该问题,因为此行也返回0: $ no_of_rec = mysql_num_rows($ rs); 并且它使用正确的语法/格式/“拼写”。 – Waddler 2012-03-30 17:57:58

+0

虽然我有机会尝试你的代码。 (我想编辑我原来的评论,但我不在5分钟的窗口。) – Waddler 2012-03-30 18:10:25