PHP에서 MySQL 쿼리를 실행하려고하는데 몇 가지 문제가 있습니다. PHP에서이 쿼리를 실행할 때 항상 0 행을 반환하지만 내 콘솔에서이를 실행하면 예상대로 작동하는 것으로 보입니다.PHP의 MySQL : 항상 0 행이 반환됩니다.
<?php
include '../mysql.php';
$name = $_POST["name"];
$email = $_POST["email"];
$sql = "SELECT COUNT(*) FROM accounts WHERE name = '" . $name . "' AND email = '" . $email . "'";
echo $sql . "</br>";
$res = mysqli_query($connection, $sql);
if(!$res) {
die("Query Failed!");
}
$row_cnt = $result->num_rows;
printf("Result set has %d rows.</br>", $row_cnt);
if($row_cnt > 0) {
echo "Account exists!";
} else {
echo "Account does not exist! Creating...</br>";
if(mysqli_query($connection, "INSERT INTO accounts (`name`, `email`, `password`, `ip`) VALUES ('" . $name . "', '" . $email . "', 'abc123', 'localhost')")) {
echo "Created account!";
} else {
echo "Failed to create account";
}
}
mysqli_free_result($res);
mysql_close($connection);
출력 :
이SELECT COUNT(*) FROM accounts WHERE name = 'testUser' AND email = '[email protected]'
Result set has 0 rows.
Account does not exist! Creating...
Created account!
은 다음 표에 우리가 예상을 참조하십시오
mysql> select * from accounts;
+----+----------+------------------+----------+-----------+
| id | name | email | password | ip |
+----+----------+------------------+----------+-----------+
| 10 | testUser | [email protected] | abc123 | localhost |
+----+----------+------------------+----------+-----------+
1 row in set (0.00 sec)
그러나 쿼리를 다시 실행하면 동일한 정확한 출력을 가지고 있으며, 다른 행은 만들어진.
mysql> select * from accounts;
+----+----------+------------------+----------+-----------+
| id | name | email | password | ip |
+----+----------+------------------+----------+-----------+
| 10 | testUser | [email protected] | abc123 | localhost |
| 11 | testUser | [email protected] | abc123 | localhost |
+----+----------+------------------+----------+-----------+
2 rows in set (0.00 sec)
데이터가 이미 행에 있음을 감지 할 수없는 이유에 대한 아이디어가 있습니까?
당신은'SELECT count (*)'를 사용하고 나서 행 수를 확인합니다. 이것은 결코 작동하지 않을 것입니다. 조건에 맞는 행 수인 첫 번째 (계산) 열의 값을 가져와야합니다. – Devon
imo, 왜냐하면 당신은 하나의 행에 그것을 세는 것이 확실하기 때문입니다. 어쨌든 가져 오십시오. 'num_rows' 카운트는 아무 쓸모가 없다는 것을 알려줍니다. 데이터를 원하고 처리하기 때문에 유용한 정보가 거의 없습니다. 일부 데이터가 있다고 가정합니다. 항상 가져 오기. 당신은 어쨌든 그것의 끝을 테스트합니다. 'num_rows '는'select' 쿼리와 함께 사용할 때 거의 유용하지 않습니다. 이모. –
데이터에 신경 쓰면 암호를 해시하십시오. SQL 인젝션으로부터 보호하십시오. 일부 앱은 버려지는 앱이며, 중요하지 않습니다. – Drew