2012-05-15 32 views
0

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectPhp:Hit Count。錯誤:mysql_num_rows()預計參數1是資源

嘿,我想提出一個獨特的計數器。

<?php 
$ip_add = $_SERVER['REMOTE_ADDR']; 

function ip_exists($ip){ 
    global $ip_add; 
    $query = "SELECT 'ip_count' from 'count_ip' where 'ip_count' = '$ip_add'"; 
    $query_run = mysql_query($query); 
    $query_num_rows = mysql_num_rows($query_run); 

    if($query_num_rows == 0){ 
    return false; 
    } 
    else if($query_num_rows >= 1){ 
    return true; 
    } 
} 

if(ip_exists($ip_add)) { 
    echo " exists"; 
} else { 
    echo "doesnt"; 
} 
... 

我收到此錯誤:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in 
C:\wamp\www\php\Hit Counter\index.php on line 18 

的錯誤是在這裏:

$query_num_rows = mysql_num_rows($query_run); 
+0

count_ip表的表結構是什麼? – Adam

+0

請停止使用古老的'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://news.php.net/php.internals/53799)。相反,您應該瞭解準備好的語句並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。如果你關心學習,[這裏是一個很好的PDO相關教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 –

+0

謝謝。學習:) –

回答

2

首先,我們在錯誤信息中看到,有一個boolean given - mysql_query()爲SELECT查詢返回布爾值的唯一原因是如果查詢失敗 - 它會完成的,因爲你的SQL有一個語法錯誤。你需要一些單引號改爲反引號:

$query = " 
    SELECT `ip_count` 
    FROM `count_ip` 
    WHERE `ip_count` = '$ip_add' 
"; 

對象名(列,表等)應與反引號`,任何圍繞單引號'被視爲一個文字字符串被引用。

您需要檢查查詢失敗:

$query_run = mysql_query($query); 
if (!$query_run) { 
    // Handle error here 
} 
$query_num_rows = mysql_num_rows($query_run); 

一些補充意見:

+0

真棒答案,真的留下深刻的印象:) 謝謝 –

0

mysql_query()返回一個布爾值,查詢是否成功。如果你想在正確的參數傳遞,您需要將連接處理程序分配給一個變量,並傳遞英寸

$conn = mysql_connect()... 
... 
$query_num_rows = mysql_num_rows($conn); 

雖然你不應該使用mysql_*功能了!看到我對你的問題的評論!

1

測試你的query,以確保被正確地執行它:

<?php 
... 
$query_run = mysql_query($query); 
if (!$query_run) { 
    die('Invalid query: ' . mysql_error()); 
} else { 
    // continue your code 
} 
?> 

與此類似,如果查詢失敗,你可以得到一些反饋分析!

看到這個:mysql_query Example,#1無效查詢

0

其實查詢有這將導致$ query_run(),而不是返回實際輸出的錯誤語法錯誤。在查詢中使用引號時必須小心。替換這樣的查詢:

$query = "SELECT ip_count from count_ip where ip_count='$ip_add'"; 

如果$ ip_add不是字符串,也避免單引號。如果您正在編寫字段名稱或表名稱,請避免使用引號。只有在您編寫字符串的地方您才需要報價。

相關問題