2014-07-11 3 views
-1

특정 이름과 pwd가있는 users 테이블의 행을 계산하려면 1이 있어야합니다 (존재하는 경우). 하지만 결과는 사용자의 존재 여부에 관계없이 항상 null (0이 아님)을 반환합니다. "SELECT * FROM users"라는 쿼리를 간단하게 변경해도 동일한 결과가 나타납니다. 그리고 나는 DATABASE와 TABLE의 이름이 사실이고 테이블이 비어 있지 않다는 것을 확신합니다!mysqli_num_rows가 항상 NULL을 반환하는 이유는 무엇입니까?

그런데 왜 오류를 없애기 위해 "mysqli_query"앞에 "@"기호를 사용해야합니까? !

enter code here 
<?php 
    #$mysql_db_hostname = "localhost"; 
    $mysql_db_hostname = "127.0.0.1"; 
    $mysql_db_user = "root"; 
    $mysql_db_password = ""; 
    $mysql_db_database = "smartFSUsers"; 
    $con = mysqli_connect($mysql_db_hostname, $mysql_db_user,  $mysql_db_password,$mysql_db_database); 
    if (!$con) { 
     trigger_error('Could not connect to MySQL: ' . mysqli_connect_error()); 
    } 
    $name = $_GET["name"]; 
    $password = $_GET["password"]; 
    $query = "SELECT * FROM users WHERE name='$name' AND password='$password'"; 
    $result [email protected]_query($query,$con); 
    echo($result); 
    [email protected]_num_rows($result); 
    echo"the row num is $row \n"; 
    ?> 
+3

함수 호출 앞에'@ '를 사용하면 오류가 숨겨집니다. '@'를 끄고 오류를 수정하는 것이 훨씬 더 좋은 생각이다. – andrewsi

+3

아마 당신이 귀를 막지 않았고'@'오류 억제 연산자를 사용하여 "lalalalalala가 당신의 말을들을 수 없다"면, 실제로 코드에서 몇 가지 오류 메시지/경고를 얻을 수 있습니다. 게다가 멋진 SQL 인젝션 공격 (http://bobby-tables.com) 취약점이 있습니다. 서버 pwn3d를 가지고 즐기십시오. –

+3

그리고 우리가 제대로 일을하는 동안 SQL 주입이 가능합니다! –

답변

1

RTM은 : http://php.net/mysqli_query

$result [email protected]_query($query,$con); 

당신은 당신의 매개 변수를 반전 있어요. $con가 먼저 와야 :

당신은 당신의 코드에 오류 보정을 추가 방해 한 경우
$result = mysqli_query($con, $query) or die(mysqli_error()); 

는, 당신은 이것에 대해 이야기 한 것입니다. 하지만 아니, 모든 오류 메시지를 숨기려면 @을 선택했습니다.

+0

오류가있는 예제 대신 올바른 코드를 포함하는 것이 좋습니다. – tadman

+0

@tadman : 너무 많은 사람들이 가서 오류를 숨기기 위해 질문을 다시합니다. 아마도 –

+0

. 나는 당신의 고정 된 버전이 그 자체에 서고 다른 하나가 그저 방해가된다고 생각합니다. – tadman

관련 문제