Проблема с вашим вторым запросом заключается в том, что $name
внутри вызова LENGTH
тоже должен быть в кавычках, т. Е.
$mysqli->query("UPDATE table SET name=IF(LENGTH('$name')=0, name, '$name') WHERE id=1") or die($mysqli->error);
Чтобы использовать addslashes
в этом запросе, вы должны написать:
$mysqli->query("UPDATE table SET name=IF(LENGTH('".addslashes($name)."')=0, name, '".addslashes($name)."') WHERE id=1") or die($mysqli->error);
Но на самом деле вам следует подумать об использовании подготовленного выражения;тогда вам не придется беспокоиться о выходе из кавычек.Кроме того, вы должны проверить длину $name
в PHP и вообще не запускать запрос, если он пуст.Нечто подобное должно работать (я предполагаю, что у вас есть переменная с именем $id
, в которой хранится значение идентификатора для обновления).
if (strlen($name)) {
$stmt = $mysqli->prepare("UPDATE table SET name=? WHERE id=?");
$stmt->bind_param('si', $name, $id);
$stmt->execute() or die($stmt->error);
}
Если у вас есть несколько фрагментов данных для обновления, вы можете попробоватькак то так:
$name = 'fred';
$city = '';
$state = 'SA';
$id = 4;
$params = array();
foreach (array('name','city','state') as $param) {
if (strlen($$param)) $params[$param] = $$param;
}
$sql = "UPDATE table SET " . implode(' = ?, ', array_keys($params)) . " = ? WHERE id = ?";
$types = str_repeat('s', count($params)) . 'i';
$params['id'] = $id;
$stmt = $mysqli->prepare($sql);
$stmt->bind_param($types, ...$params);
$stmt->execute() or die($stmt->error);