2009-10-17 47 views
0

好吧我是新來的PHP和MySQL我試圖建立一個網頁計數器,但我的頁面計數器不能正確更新,它會得到下面列出的警告。PHP和MySql hitcounter問題?

Warning: mysqli_query() expects at least 2 parameters, 1 given in 
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in 

這裏是下面的php代碼。

<?php 

$page = $_SERVER['SCRIPT_FILENAME']; 

// Query member data from the database and ready it for display 
$mysqli = new mysqli("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"SELECT id page FROM mysql_counter_logs WHERE page = '$page'"); 

if (mysqli_num_rows($dbc) == 0) { 
    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"INSERT INTO mysql_counter_logs (page) VALUES ('$page')"); 
    mysqli_query($dbc); 
} elseif (mysqli_num_rows($dbc) == 1) { 
    $mysqli = new mysqli("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"UPDATE mysql_counter_logs SET hits = hits + 1 WHERE page = '$page'"); 
    mysqli_query($dbc); 
} 

//Retreives the current count 
$count = mysqli_fetch_row(mysqli_query($mysqli,"SELECT hits FROM mysql_counter_logs")); 

if (!$dbc) { 
    // There was an error...do something about it here... 
    print mysqli_error(); 
} 


//Displays the count on your site 
print "$count[0]"; 

?> 

回答

2

代碼的摘錄:

$mysqli = new mysqli("localhost", "root", "", "sitename"); 
$dbc = mysqli_query($mysqli,"INSERT INTO mysql_counter_logs (page) VALUES ('$page')"); 
mysqli_query($dbc); 

首先,根據mysqli_query手冊,作爲函數使用時:

mixed mysqli_query (mysqli $link , string $query [, int $resultmode ]) 

這意味着你必須通過您的$mysqli變量作爲第一個參數,而您的查詢作爲第二個參數。

我沒有得到的是爲什麼你在我複製粘貼的第三行上使用mysqli_query這種方式,而你在代碼的其他部分正確使用它?

您確定要使用該功能嗎?


同時,瞭解其上線你得到這些錯誤消息可能有助於;-)
檢查你沒有做任何事情的「錯誤」出現 - 像「mysqli_query()預計,至少2個參數,1給出


關於它的思考:mysqli_query將返回布爾false,如果有一個錯誤。

在這種情況下,您不應該致電mysqli_num_rows返回值mysqli_query,因爲它不是有效的mysqli_result - 因此是第二個錯誤消息。

您正在檢查腳本末尾的$dbc,但也許有趣的是快速檢查它是否太快 - 實際上,在每次撥打mysql_query後,我都會這麼說。


此外,作爲一個旁註:你可能並不需要實例的mysqli類,很多時候:剛剛實例化一次,然後用$mysqli變量有腳本的其餘部分。

爲了安全起見,爲避免任何麻煩,在注入查詢之前,您可能還想在$page變量上使用mysqli_real_escape_string

哦,還有,順便說一句:你可以通過INSERT ... ON DUPLICATE KEY UPDATE Syntax是,MySQL允許使用興趣;-)
(嗯,這是如果page是你的表的主鍵,至少...)

+0

第12行和第18行 – new 2009-10-17 18:58:19

+0

我已經編輯了我的答案几次;希望這可以幫助 ! – 2009-10-17 19:04:59