其中IN来自php数组的mysql中的多列


Where IN multiple column in mysql from php array

如果clouse IN超过一列,则无法找到如何执行此查询我有一个例子:

$post = json_decode($HTTP_RAW_POST_DATA);
$phoneNumbers = implode(",", $post->phones);
$emails = implode(",", $post->emails);
$sql = "SELECT phone_number,email,id FROM users WHERE phone_number,email IN (($phoneNumbers),($emails))";
$result = mysql_query($sql);

参数来自post-response,我需要将其与逻辑OR进行比较。这个例子对我不起作用,结果什么都不是。我是怎么做到的。Thx

将两个WHERE INAND:连接

SELECT phone_number, email, id FROM users WHERE phone_number IN ({$phoneNumbers}) AND email IN ($emails)

如果您需要匹配电话号码和电子邮件,则生成您的查询:

$ors = [];
foreach ($phoneNumbers as $i => $number) {
    $ors[] = "(phone_number = :phoneNumber{$i} AND email = :email{$i})";
    $params[":phoneNumber{$i}"] = $number;
    $params[":email{$i}"] = $emails[$i];
}
$query = $pdo->prepare("SELECT phone_number, email, id FROM users WHERE ".implode(' OR ', $ors));
$query->execute($params);
SELECT 
  phone_number,
  email,
  id 
FROM users 
WHERE phone_number IN ($phoneNumbers)
  OR email IN ($emails)
$post = json_decode($HTTP_RAW_POST_DATA);
$phoneNumbers = $post->phones;
$emails = $post->emails;
$ors = [];
foreach ($phoneNumbers as $i => $number) {
    $ors[] = "(phone_number = :phoneNumber{$i})";
    $params[":phoneNumber{$i}"] = $number;
}
foreach ($emails as $i => $email) {
    $ors[] = "(email = :email{$i})";
    $params[":email{$i}"] = $email;
}
$query = $pdo->prepare("SELECT phone_number, email, id FROM users WHERE ".implode(' OR ', $ors));
print_r($query);
$query->execute($params);