나는 쿼리를 작성하려고하는데 PHP 스타터입니다.
$minPrice = trim($_REQUEST['minPrice']);
$maxPrice = trim($_REQUEST['maxPrice']);
$minCarat = trim($_REQUEST['minCarat']);
$maxCarat = trim($_REQUEST['maxCarat']);
$color = trim($_REQUEST['color']);
$cut = trim($_REQUEST['cut']);
$clarity = trim($_REQUEST['clarity']);
$type = trim($_REQUEST['type']);
type, clarity 및 cut은 쉼표로 구분 된 문자열입니다.
예 : $ type = "1000,1002,1001";
$statement = $conn->prepare('SELECT * FROM diamondsList WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat AND cut IN(' . $cut . ') AND clarity IN ('.$clarity.') AND color IN ('. $color.') AND type IN (' . $type.')');
오류는
{"error":"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AND clarity IN () AND color IN () AND type IN ()' at line 1"}
첫째, 쿼리가 IN ( '. $ cut.')에서 오류를 제공하는지 확실하지 않습니다. 구문에 어떤 문제가 있습니까?
둘째, 구문이 수정되면 쿼리가 정확합니까?
수정 후 다음과 같은 쿼리가 있습니다. searchDiamonds&minPrice=0&maxPrice=10000&minCarat=0&maxCarat=5&color=2000,2001&type=1000,1001&cut=3000,3001&clarity=4000,4001
표의 두 항목은 다음과 같습니다.
price carat type color cut clarity
2000 2 1000 2000 3000 4000
그러나 아무것도 선택되지 않고 항상 결과가 0입니다.
쿼리는 무엇이어야합니까?
에서 빈 문자열을 사용할 수 없습니다 IN
. 예를 들어 $cut
설정 되어 있는지 확인 하고 비어 있으면 쿼리를 변경해야합니다. 이렇게 :
$statement = $conn->prepare('SELECT * FROM diamondsList WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat ' . (!empty($cut) ? ('AND cut IN(' . $cut . ')') : '') . ' AND clarity IN ('.$clarity.') AND color IN ('. $color.') AND type IN (' . $type.')');
sqlfiddle 에서 쿼리를 테스트 했으며 PHP에서 올바르게 형식화 된 경우 제대로 작동합니다.
SELECT * FROM diamondsList
WHERE price >= 0
AND price <= 10000
AND carat >= 0
AND carat <= 5
AND cut IN(3000,3001)
AND clarity IN (4000,4001)
AND color IN (2000,2001)
AND type IN (1000,1001)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다