반응형
가능한 중복 :
이 기능을 사용하여 데이터베이스에서 중복을 찾으려고하는 초보자입니다.
function uni($field, $value) {
$sql= "SELECT * FROM user WHERE ".$field." = '".$value."'";
$result = $pdo->query($sql);
$rows = $result->fetchAll(PDO::FETCH_COLUMN, 1);
return count($rows);
}
$username = $_POST['username'];
$result = uni("username", $username);
... 내가 단단한 무언가에 머리를 부딪 히려고합니다. 어떤 이유로 쿼리가 결과를 반환하지 않으며 그 이유를 모르겠습니다.
해결 방법
좋습니다. PDO
를 사용하고 있습니다. 하지만 스 니펫은 여전히 인젝션 공격에 노출되어 있습니다. 원시 사용자 입력을 쿼리에 전달하고 있습니다. 또한 발견 된 행의 개수 만 원하는 경우 SELECT *
를 사용하지 말고 전체 결과 집합을 FETCH하지 하여 개수를 세지 마십시오!
function uni($field,$value)
{
$db = new PDO();//make connection, which you don't seem to do
//or (not so good approach):
//global $db;
//Best approach would be to pass the connection to the function, as an extra argument, though
$stmt = $db->prepare('SELECT '.$field.' FROM user WHERE '.$field.' = :value');
if ($stmt->execute(array(':value' => $value)))
{
return $stmt->rowCount();
}
//query failed, throw errors or something
}
function uni($field,$value,$db)
{
$stmt = $db->prepare('SELECT '.$field.' FROM user WHERE '.$field.' = :value');
if ($stmt->execute(array(':value' => $value)))
{
return $stmt->rowCount();
}
return false;
}
$username = $_POST['username'];
$result = uni('username', $username,$pdo);//<--pass connection
참조 페이지 https://stackoverflow.com/questions/12818696
반응형
'MySql' 카테고리의 다른 글
MySQL 서명되지 않은 mysql Tinyint (0) | 2021.01.25 |
---|---|
MySQL 양조 링크 mysql이 완료되지 않았습니다. (0) | 2021.01.24 |
MySQL 높은 CPU 사용량 (0) | 2021.01.24 |
MySQL 데이터베이스에서 검색된 문자열 값을 프로그램에 정의 된 문자열 값과 비교하는 방법 (0) | 2021.01.24 |
MySQL phpmyadmin과 mysql에서 관계 생성에 대한 조언 (0) | 2021.01.24 |
댓글