2016-04-07 2 views
0

Эй, ребята, я прочитал много сообщений об этом (которые очень старые), и я пробовал все в них, но я не могу понять, проблема ..PHP SQL UPDATE только в том случае, если данные post имеют данные с использованием 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, чтобы он мог работать с одним значением.

+0

Можете ли вы показать часть кода, выдающего инструкцию по обновлению? –

ответ

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

Прохладный спасибо ... да, я закончил что-то подобное. Но просто из навязчивой необходимости знать. Есть ли способ передать значение NULL для sql из php для использования с coalesce() ?? – Brad

 Смежные вопросы

  • Нет связанных вопросов^_^