1

3 つのフィールドがあり、入力されたフィールドのみを更新する必要があります。考えられる解決策は次のとおりです。

<?php
if(trim($_POST['field_1'])!='')
   // query for update field 1
if(trim($_POST['field_2'])!='')
   // query for update field 2 
if(trim($_POST['field_3'])!='')
   // query for update field 3
?>

しかし、それは最善の最適化ではありません。mysqli (バインド付き) または PDO を使用して単一のクエリでそれを行う方法の例を教えてください。

4

2 に答える 2

1

関連するフィールドのみ$_POSTが含まれているか、それ以上含まれているかはわかりません。そのため、それらを配列に分離して代わりに使用する方法を見つけると思います。$tmp

また、すでに PDO を使用して DB に接続し、それを に保存していると仮定します$db

最後に、行フィルター (where節) は でストリングとして既に作成されています$rowfilter

// trim all values
array_map('trim',$tmp);
// eliminate empty string values
$tmp=array_filter($tmp,function($el){return $el!='';});
// build the query string
$fields=array_map(function($el){$el="`$el`=?";},array_keys($tmp));
$fldstr=implode(',',$fields);
$sql="UPDATE `mytable` SET $fldstr WHERE $rowfilter";
// prepare and execute
$stmt = $db->prepare($sql);
$stmt->execute(array_values($tmp));
于 2013-11-07T09:20:06.460 に答える