-1
나는 PHP 스크립트의 IN() 절에 문제에 직면하고있어
, 나는 다음과 같은 POST 요청에서 다른 페이지에서 데이터를 수신 :PHP 준비된 문장 WHERE IN 사용 절 (...) 절
if(isset($_POST['mycountry'])){
if($_POST['mycountry']) $where[] = 'pays in (:pays)';
};
$ _POST [ 'mycountry'] : 사용자가 선택한 국가를 포함합니다. 사용자가 0 개 또는 여러 국가를 선택할 수 있습니다.
사용자가 국가/국가를 선택하면 해당 열과 값 (국가)을 IN 절.
if(isset($_POST['mycountry'])){
$tags = implode(', ', $_POST['mycountry']);
$stmt->bindParam(':pays', $tags, PDO::PARAM_BOOL);
}
사용자가 잘 작동 제로 또는 하나 개의 국가를 선택, 사용자 일단은 아무것도 돌려주지 않는 이상 하나를 선택!
아이디어가 있으십니까?
PDO 매개 변수는 임의의 문자열을 바인드하여 SQL을 구성 할 수 없으며 준비된 문에서 변수 값을 1 : 1로 대체합니다. 따라서 단일 자리 표시 자': pay '를 전달하면 쉼표로 구분 된 모든 태그의 단일 문자열 값이 함께 쿼리로 전송됩니다. 링크 된 질문에서 제안 된 몇 가지 대안 솔루션이 있습니다. –
하나 이상의 선택된 항목에 대해 작동하는 문제는 사용자가 둘 이상을 선택하지 않을 때 발생합니다! – MDIT
오른쪽. 단 하나만 선택하면 MySQL은 궁극적으로 'WHERE pays IN ('1 ')'이 유효하다는 결과를 얻고 결과를 반환합니다. 그러나 배수가 선택되면, MySQL은'어디에서 지불합니까 (1,2,3,4,5 ')를 보게됩니다. 그것은 쉼표로 구분 된 값 목록이 아니라 숫자와 쉼표로 구성된 단일 문자열 값입니다. 쿼리는 구문 적으로 유효하지 않지만 행과 일치하지 않습니다. 서면으로 시도하는 것을 할 수 없습니다. 링크 된 질문에서 높은 점수를 얻는 답을보십시오. –