특정 이름과 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";
?>
함수 호출 앞에'@ '를 사용하면 오류가 숨겨집니다. '@'를 끄고 오류를 수정하는 것이 훨씬 더 좋은 생각이다. – andrewsi
아마 당신이 귀를 막지 않았고'@'오류 억제 연산자를 사용하여 "lalalalalala가 당신의 말을들을 수 없다"면, 실제로 코드에서 몇 가지 오류 메시지/경고를 얻을 수 있습니다. 게다가 멋진 SQL 인젝션 공격 (http://bobby-tables.com) 취약점이 있습니다. 서버 pwn3d를 가지고 즐기십시오. –
그리고 우리가 제대로 일을하는 동안 SQL 주입이 가능합니다! –