PHP:如何将多个值传递给SELECT查询

时间:2015-07-17 06:52:50

标签: php arrays loops foreach

我是PHP新手,希望有人可以帮助我。

我目前使用以下行从数据库中检索一个值,并将其作为一个数组输出,其中包含项目的ID和值,它们按预期工作。

现在我需要为多个项目做同样的事情所以我的输入($tID)将是一个包含多个ID而不只是一个ID的数组,我需要查询对每个ID进行OR搜索

我正在考虑使用foreach循环将" OR "附加到每个ID,但我不确定这是否是正确的方法 - 我知道下面的内容不起作用,只是想显示我的想法在这里。

有人可以帮助我并告诉我如何最好地解决这个问题吗?

我目前的PHP:

$content = "";
$languageFrm = $_POST["languageFrm"];
$tID = $_POST["tID"];

$stmt = $conn->prepare("SELECT tID, " . $languageFrm . " FROM TranslationsMain WHERE tID = ? ORDER BY sortOrder, " . $languageFrm);
$stmt->bind_param("s", $tID);
$stmt->execute();
$result = $stmt->get_result();
while($arr = $result->fetch_assoc()){
    $content[] = array("ID" => $arr["tID"], "translation" => $arr[$languageFrm]);
}

我的想法:

foreach($tID as $ID){
    $ID . " OR ";
}

非常感谢您的帮助, 麦克

2 个答案:

答案 0 :(得分:2)

有两种方法,假设$ tID是一个ID数组

使用MySQL IN()子句

当$ tID不是数组但只有一个标量值时,这也会起作用。

$tID = array_map('intval', (array)$tID); // prevent SQLInjection
if(!empty($tID)) {
    $query .= ' WHERE tID IN(' . implode(',', $tId) . ')';
} else {
    $query .= ' WHERE 0 = 1';
}

使用OR子句,如您所建议的那样

有点复杂的情况。

$conds = array();
foreach($tID as $ID) {
    $conds[] = 'tID = ' . intval($ID);
}

if(!empty($conds)) {
    $query .= ' WHERE (' . implode(' OR ', $conds) . ')';
} else {
    $query .= ' WHERE 0 = 1';
}

答案 1 :(得分:0)

根据上述条件,您可以尝试使用implode();

implode($tID,' OR ');

你也可以使用IN条件而不是像这样的OR。

implode($tID,' , ');