我是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 ";
}
非常感谢您的帮助, 麦克
答案 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,' , ')
;