PHP和MySql hitcounter问题?

时间:2009-10-17 18:50:16

标签: php mysql

好吧我是php和mysql的新手我试图建立一个网页点击计数器,但我的页面计数器不能正确更新,它会收到下面列出的以下警告。

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]";

?>

1 个答案:

答案 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,然后将其注入查询。

哦,顺便说一下:你可能对MySQL允许使用的INSERT ... ON DUPLICATE KEY UPDATE Syntax感兴趣;-)
(好吧,如果page是你桌子的主键,至少......)