2009-10-17 61 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