2016-07-26 8 views
2

4列あります。私はループの値に来るような(等しい)列の値だけを更新しようとしています。複数の列を条件付きで更新する

for ($a=0; $a<$i ; $a++) { 
      $sql= "update table1 set 
      col1= CASE when col1 like '$distval[$a]' then col1='$arr[$a]' else col1 end, 
      col2=CASE when col2 like '$distval[$a]' then col2='$arr[$a]' else col2 end, 
      col3=CASE when col3 like '$distval[$a]' then col3='$arr[$a]' else col3 end, 
      col4=CASE when col4 like '$distval[$a]' then col4='$arr[$a]' else col4 end"; 
      mysqli_query($conn, $sql); 
     } 

私はコードを説明してみましょう:

$ distval:私は、ユーザーが入力した値で更新するすべての4つの列の異なる値を含む配列です。

$ arr: '$ distval'と同じ番号のテキストフィールドの配列です。最初のテキストフィールドに値を入力すると、 '$ distvalue'の最初の値と同じように、テーブル内のすべての値が更新されます。

コードは何もエラーなしで更新されません。

+0

'case'文はコードをプログラミングされていないが必要に '$ [$ A] ARR' = COLXを削除します。それらの内部で代入を「実行」することはできません。 –

答えて

1

その後、内部であなただけの '$のARR [$ A]'

$sql= "update table1 set 
      col1= CASE when col1 like '%". $distval[$a]. "%' then '$arr[$a]' else col1 end, 
      col2= CASE when col2 like '%". $distval[$a]. "%' then '$arr[$a]' else col2 end, 
      col3= CASE when col3 like '%". $distval[$a]. "%' then '$arr[$a]' else col3 end, 
      col4= CASE when col4 like '%". $distval[$a]. "%' then '$arr[$a]' else col4 end"; 
+0

は依然として動作しません。私はどこにクエリのどこかには、必ずしもないと思う。 – tooba

+0

あなたのクエリではどこにもないので、テーブルのすべての行を更新したいと思います。まだ動作していないのはどういう意味ですか? ..あなたはエラーがあります..あなたは予想外の結果を持っていますか? – scaisEdge

+0

$ distval [$ a]へのアクセスに問題があり、同様に使用してクエリ用の文字列連結を使用している可能性があります。回答を更新しました – scaisEdge

0

=thenには意味がありません。私は強くはなく、クエリ文字列に値を直接ダンプするよりも、パラメータ化クエリを使用することをお勧めします

update table1 
    set col1 = (CASE when col1 like '$distval[$a]' then '$arr[$a]' else col1 end), 
     col2 = (CASE when col2 like '$distval[$a]' then '$arr[$a]' else col2 end), 
     col3 = (CASE when col3 like '$distval[$a]' then '$arr[$a]' else col3 end), 
     col4 = (CASE when col4 like '$distval[$a]' then '$arr[$a]' else col4 end); 

:正しいcaseは次のようになります。

+0

はまだ動作しません。私はどこにクエリのどこかには、必ずしもないと思う。 – tooba

+0

それは働いた。ありがとう。 – tooba

関連する問題