Jak správně zapsat syntaxi pro WhereOr
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Dvory59
- Člen | 40
Ahoj, potřeboval bych prosím poradit se zápisem WhereOr.
Chtěl bych updatovat jeden sloupec v tabulce, ale pro víc řádků. Řádky
identifikuju podle ID, který mám v poli $array.
Teď to mám takto šložitě, kde si ty where podmínky vytvořím pomocí foreach do stringu a ten pak předám přímo do query požadavku :
$string = "(";
foreach ($array as $id)
{
if ($i != $arrayLength - 1)
{
$string = $idx . '' . 'id = ' . $id . ' OR ';
}
else
{
$string = $idx . '' . 'id = ' . $id.')';
}
$i++;
}
$this->database->query('UPDATE projects SET status = '.$status.' WHERE '.$string);
Poradí mi prosím někdo jak to zapsat pomocí WhereOr nějak jednodušeji? Já na to nemůžu přijít.
Díky moc
- David Matějka
- Moderator | 6445
ahoj,
1. nikdy neprilepuj do SQL dynamicke hodnoty, pouzivej vzdy parametry.
$idx
je predpokladam chyba a ma tam byt $string
, takze
by to mohlo vypadat takhle:
$parameters = [];
$parameters[] = $status;
$string = "(";
foreach ($array as $id)
{
$parameters[] = $id;
if ($i != $arrayLength - 1)
{
$string .= 'id = ? OR ';
} else {
$string .= 'id = ?)';
}
$i++;
}
$this->database->queryArgs('UPDATE projects SET status = ? WHERE ' . $string, $parameters);
2. pro slepovani te podminky je lepsi pouzit implode:
$parameters = [];
$parameters[] = $status;
$or = [];
$string = "(";
foreach ($array as $id)
{
$parameters[] = $id;
$or[] = 'id = ?';
}
$string = '(' . implode(' OR ', $or) . ')';
$this->database->queryArgs('UPDATE projects SET status = ? WHERE ' . $string, $parameters);
3. no ale vzhledem k tomu, ze hledas vlastne IN
operator, tak
to muzes zjednodusit na:
$this->database->query('UPDATE projects SET status = ? WHERE id IN(?) ', $status, $array);