이 구조의 테이블이 있습니다.
+----+-----------+
| id | user_pass |
+----+-----------+
| 1 | 01 |
| 2 | 10 |
+----+-----------+
그리고 여기 내 질문이 있습니다.
SELECT COUNT(*) FROM users WHERE user_pass = '$pass' limit 1
문제 :
$pass = '10'; // output: 1
$pass = '01'; // output: 0
값을 모두 상태 10
및 01
출력이 그들 각각에 대해 다른 이유는 테이블에 존재입니까?
여기 바이올린이 있습니다.
따옴표는 당신의 친구입니다. 따옴표가없는 행을 삽입 할 때 입력 한 결과는 정수로 해석됩니다. 그래서 01
얻는다 1
더 결과를 얻을 수없는 이유가 설명합니다.
따라서 SQL은 다음과 같아야합니다.
INSERT INTO `users` VALUES (NULL, '01');
INSERT INTO `users` VALUES (NULL, '10');
여기 바이올린으로 : http://sqlfiddle.com/#!9/6e5fe/1/0
실제 문제 (코멘트에서 찾을 수 있음)는 PDO가 데이터를 데이터베이스에 삽입하는 데 사용되었다는 것입니다. 해결책은 문자열을 문자열로 저장하는 것입니다. 어떤 이유로 자동으로 정수로 변환되는 값이 있으므로 선행 0이 손실됩니다.
문자열이 문자열이되도록하는 가장 좋은 방법은 다음과 같이 명시 적으로 문자열로 캐스팅하는 것입니다.
$password = (string)$_POST['password'];
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다