2016-04-07 6 views
0

私はこれについて非常に古い記事を読んできましたが、すべてを試しましたが、問題。..ポストデータにCOALESCE()を使用して入力が与えられている場合のみPHP SQL UPDATE

私はテーブルレコードを更新するためのフォームがあります。しかし、名前が入力されていない場合は、元の名前は更新されず、空の文字列で置き換えられます。

私はCOALESCE()を使用しようとしましたが、私のPHPコードからNULL値として何も認識しません。

私は引用符「」その後、私はSQLエラーが発生しますが、私がしなければ、それがヌルとして認識されていないと入れない場合..私はでSSHおよびMySQLと種類を実行する場合、たとえば

..

select coalesce( ''、 'test');

MySQLは、文字列ではなく空の文字列を表示します。ヌルはちょうど代わりに何を通過しないので

ちょうどカントはここ

...過去の引用符問題なくポスト変数でクエリを実行得るように見えるが、私のコードは、このdoesntの仕事は...

/* 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なので、1つの値だけを使用して結合を実行するのが好きです。

+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

クールな感謝...ええ私は同様のことをやってしまった.. しかし、ちょうど強迫観念から知る必要があります。 coalesce()で使用するためにphpからsqlにNULL値を渡す方法はありますか? – Brad

関連する問題