У меня есть функция, которая связывает / подготавливает инструкцию, затем выполняет ее:
function db_update ($table, $set, $where_col, $where_val)
{
$s = "UPDATE `$table` SET ";
foreach ($set as $k => $v)
$s.= "$k = :".trim($k).", ";
$s = trim($s, ', ');
$s.= " WHERE `$where_col` = :$where_col";
$binds = array();
foreach ($set as $k => $v)
$binds[':'.$k] = trim($v);
$binds[':'.$where_col] = trim($where_val);
return db_run($s, $binds);
}
В основном db_run
использует ваши обычные методы PDO:
function db_run($stmt, $binds = array())
{
// ...
$sth = $db->prepare($stmt);
$sth->execute($binds);
// ...
}
Пример использования A:
db_update('table', ['color' => 'red'], 'fruit', 'apple');
Результат:
- Подготовлено:
UPDATE table SET color = :color WHERE fruit = :fruit
- Фактический:
UPDATE table SET color = 'red' WHERE fruit = 'apple'
Это работает просто отлично, но моя главная проблема в том, что если использование будет таким:
Пример использования B:
db_update('table', ['color' => 'red'], 'color', 'black');
Результат:
- Подготовлено:
UPDATE table SET color = :color WHERE color = :color
- Факт:
UPDATE table SET color = 'black' WHERE color = 'black'
Как мне сделать так, чтобы фактический результат был:
UPDATE table SET color = 'red' WHERE color = 'black'