IN
은 =
과 비교하는 방법 만 알고 NULL을 처리하기 위해 다르게 비교해야하기 때문에 IN
조건자를 사용할 수 없습니다.
MySQL에는 NULL = NULL이 true이고 NULL = 'RED'가 false라는 것을 알고있는 비표준 null-safe equal operator <=>
이 있습니다.
MySQL 이외의 다른 것을 사용하는 경우 RDBMS는 유사한 술어에 대한 표준 SQL 구문 인 IS [NOT] DISTINCT
을 지원할 수 있습니다.
$arr = array('C050101','RED', 'C070104', NULL);
$sql = "SELECT `id`, `WebTitle`, `StockCode` FROM `stock`
WHERE (`StockCode`, `StockVariant`) <=> (?, ?)
OR (`StockCode`, `StockVariant`) <=> (?, ?)";
$stockstmt = $pdo->prepare($sql);
if ($stockstmt === false) { die(print_r($pdo->errorInfo(), true)); }
$status = $stockstmt->execute($arr);
if ($status === false) { die(print_r($stockstmt->errorInfo(), true)); }
당신이 술어의 목록을 작성하는 방법을 내가 당신에게 그것을 떠날거야 :
나는 다음과 작동 시험. 귀하의 코멘트를 다시
:
권장 연습이 없거나 적용 할 값을 나타내는 리터럴 문자열 'NULL'을 사용하지 않는 것. 이것이 SQL에서 NULL이되는 것입니다.
당신이 더 역동적 술어를 구축 할 수있게하는 기능을 원하는 경우,이 시도 :
function lookformultiplethings(array $arr)
{
global $pdo;
$where = array();
$values = array();
foreach ((array) $arr as $term) {
$where[] = '('
. join(',', array_map(function ($col) {return "`$col`";}, array_keys($term)))
. ') <=> ('
. join(',', array_fill(0,count($term),'?'))
. ')';
$values = array_merge($values, array_values($term));
}
$sql = "SELECT `id`, `WebTitle`, `StockCode` FROM `stock` ";
if ($where) {
$sql .= "WHERE " . join(' OR ', $where);
}
$stockstmt = $pdo->prepare($sql);
if ($stockstmt === false) { die(print_r($pdo->errorInfo(), true)); }
$status = $stockstmt->execute($values);
if ($status === false) { die(print_r($stockstmt->errorInfo(), true)); }
print_r($stockstmt->fetchAll());
}
lookformultiplethings(array(
array('StockCode' => 'C050101', 'StockVariant' => 'RED'),
array('StockCode' => 'C070104', 'StockVariant' => 'NULL'),
));
당신이 전달하는 배열의 키가 합법적 열 이름이 있음을주의하십시오. 즉, 실제 열의 화이트리스트에 대해 확인하지 않으면 사용자가 입력 한대로 열 이름을 설정하지 마십시오.
'Where where code in (테이블에서 Products 코드 선택)'과 같은 의미입니까? 귀하의 질문은 혼란 스럽습니다. – Kyle
나는 뭔가가 작동하지 않는다고 말하지 않았다. 난 그냥 위의 ..보다 더 복잡한 쿼리를 사용하여 선택하고 싶습니다'WHERE (Code = "C050101"AND Variant = "RED") 또는 (Code = "C070104"AND Variant IS NULL)' – Ron
글쎄, 그런 종류 당신의 대답은 바로 거기에 있습니다, 그렇지 않습니까?조회 할 두 필드를 추가하여 동적으로 조회를 생성하거나 두 필드에서 조인 할 임시 테이블을 작성하십시오. – MatsLindh