mysql — PHP SQL ОБНОВЛЕНИЕ, только если данные поста были введены с использованием COALESCE ()

Эй, ребята, я прочитал много сообщений об этом (которые очень старые), и я попробовал все в них, но я не могу понять проблему ..

Итак, у меня есть форма для обновления записей таблицы. Но, скажем, если имя не было введено, то оно не сохраняет оригинальное имя обновлением, а просто заменяет его пустой строкой.

Я пытался использовать COALESCE (), но он не распознает ничего из моего PHP-кода в качестве значения NULL.

Если я не ставлю кавычки », то я получаю ошибки SQL, но если я делаю это, он не распознается как ноль ..

например, если я ssh в и запустить MySQL и введите ..

выберите coalesce (», ‘test’);

тогда MySQL просто отображает пустую строку, а не строку с чем-то в ней.

Кажется, я не могу пройти мимо запросов с переменными без проблем с кавычками.

Вот мой код …

/* Original query that replaces with empty input feilds...
$update = "UPDATE KIT202_product SET Name='". $_POST['name']
. "', Price='". $_POST['price']
. "', Description='". $_POST['desc']
. "' WHERE ID=". $_POST['id'];
*/

//What I ended up trying but still doesn't work :(...
$name=NULL;
if (!empty($_POST['name'])) $name="'". $_POST['name']. "'";
$price=NULL;
if (!empty($_POST['price'])) $price="'". $_POST['price']. "'";
$desc=NULL;
if (!empty($_POST['desc'])) $desc="'". $_POST['desc']. "'";

это не работает, потому что null просто ничего не передает вместо NULL, так что это похоже на запуск coalesce только с 1 значением.

0

Решение

Что делать, если вы делаете 2 вещи: 1) Создаете небольшую функцию проверки для ваших полей; 2) Разделить обновление, чтобы обновить только то, что прошло проверку.
Отсюда слабо

$updatePrefix = "UPDATE KIT202_product SET ";
$updateSuffix = "WHERE ID=". $_POST['id']; // You should first these for injection

$conditions = '';
if (isValid($_POST['name'])) $conditions .= " Name='".$_POST['name']."'";
if (isValid($_POST['price'])) {
if ($conditions != '') $conditions .= ', ';
$conditions .= " Price= '".$_POST['price']."'";
}
if (isValid($_POST['desc'])) {
if ($conditions != '') $conditions .= ', ';
$conditions .= " Description= '".$_POST['desc']."'";
}

if ($conditions != '') $query = $updatePrefix . $conditions . $updateSuffix;

function isValid($input) {
return (!(empty($input) && $input == ''));
}

Это должно работать, чтобы делать то, что вам нужно.

ОБНОВИТЬ: Отвечая на ваш комментарий, да, вы можете использовать COALESCE. Попробуйте что-то вроде этого:

$name=NULL;
if (!empty($_POST['name'])) $name="'". $_POST['name']. "'";
$price=NULL;
if (!empty($_POST['price'])) $price="'". $_POST['price']. "'";
$desc=NULL;
if (!empty($_POST['desc'])) $desc="'". $_POST['desc']. "'";
$update = "UPDATE KIT202_product SET Name=COALESCE($name, KIT202.Name)". "', Price=COALESCE($price,KIT202.Price)". "', Description=COALESCE($desc, KIT202.Description)". "' WHERE ID=". $_POST['id'];
0

Другие решения

Других решений пока нет …