2009-10-17 2 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 코드입니다.

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

당신이 전달하는 의미 : 함수로 사용 mysqli_query의 매뉴얼에 따라 모든

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

첫째 :

<?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 변수를 첫 번째 매개 변수로 사용하고 쿼리를 두 번째 매개 변수로 사용하십시오.

내가 얻지 못한 것은 코드의 다른 부분에서 올바르게 사용하는 동안 복사 후 붙여 넣기의 세 번째 줄에 mysqli_query을 사용하는 이유입니다.

정말이 기능을 사용 하시겠습니까? 2 개 이상의 매개 변수를 예상) (mysqli_query "처럼 -


또한, 알고있는 라인에 당신이 그 오류 메시지를 받고는 ;-)
당신이"잘못 "다른 작업을 수행하지 않는 확인 도움이 될 수 있습니다 1 그것에 대해 생각 "


을 제공 : 오류가있는 경우 mysqli_query 부울 false를 반환합니다.

이 경우 유효한 mysqli_result이 아니므로 mysqli_query의 반환 값인 mysqli_num_rows을 호출하면 안됩니다. 따라서 두 번째 오류 메시지가 표시됩니다.

스크립트가 끝날 때 $dbc을 확인하고 있지만 실제로는 너무 일찍 확인하는 것이 재미있을 수도 있습니다. 실제로는 mysql_query을 호출 할 때마다 말하고 싶습니다. 또한


하는 (!) 참고로 : 당신은 아마 인스턴스에 여러 번하는 mysqli 클래스 필요가 없습니다 번만 그것을 실체화 한 다음 스크립트의이 휴식을 위해 $mysqli 변수를 사용합니다.

보안을 위해 문제가 발생하지 않도록하려면 을 $page 변수에 넣은 다음 쿼리에 주입하십시오.

아, 그리고, BTW : 당신은 MySQL이 사용할 수있는 INSERT ... ON DUPLICATE KEY UPDATE Syntax에 의해 관심이있을 수
;-) (page는 적어도 테이블의 기본 키의 경우 글쎄, 그건 ...입니다)

+0

줄 12 및 18 – new

+0

나는 내 대답을 두 번 편집했습니다. 이 도움이되기를 바랍니다! –