2017-12-31 81 views
2

이 코드가PDO 쿼리

$Check=$connection->prepare("SELECT ID FROM USERS WHERE EMAIL IN('Email1','Email2')"); 
$Check->execute(array(
    ':Array' => $Array, 
)); 

이 작동을하지만, 나는 SQL Injection을 피하기 위해 배열을 바인딩하지 않을 것이다. 어떻게 해결할 수 있습니까?

+0

쉼표로 구분 된 값은 좋지 않습니다. 데이터베이스 정규화를 고려하십시오. –

답변

0

당신은 하나 개의 요소로 폭파 목록을 결합하지 않으려는 것이 아니라 각각의 값을 개별적 그래서 문장의 끝 WHERE EMAIL IN (?,?)?를 사용하여 : 결과를 다시

$values = ["Email1","Email2"]; 
# This should give you ?,? 
$bindstr = implode(",",array_fill(0,count($values),'?')); 
$query = $connection->prepare("SELECT ID FROM USERS WHERE EMAIL IN({$bindstr})"); 
# Use the raw values individually in the execute 
$query->execute($values); 

희망 얻어야한다 를 찾고 있습니다.

+0

도움을 많이 주셔서 감사합니다. 첫 번째 행에서 [...]을 (를) 사용하는 이유를 설명해 주시겠습니까? 왜 IN CLAUSE에 {..}을 추가 했습니까? 도와주세요, 좋은 날을 보내길 바랍니다 :) – user9158219

+0

오, 미안 해요, PHP의 최신 버전에서'[''''''''''('')''와''' ']'=')'. – Rasclatt

+0

해명 해 주셔서 고마워요 :) – user9158219