2016-07-30 7 views
0

私はmysql_queryに疑念があります。 idとその値の配列のリストから特定のidの特定の値(idの値)を更新したい。ここidとその値の配列の与えられたリストから特定のidの特定の値を更新する

は、私は、配列

like update set name=?, age=? where id=? 

を介してこれらの値を渡すことで、1つのクエリでこれらのフィールドを更新する代わりに、上記のクエリの通常のクエリ

update table_name set name='sham', age='18' where id=1 
Update table_name set name='ram', age='19' where id=2 
Update table_name set name='rani', age='29' where id=3 

は、我々はそれを行うことができますか?書くべき何クエリ

、どのようにクエリ

+0

'case'オプションだろうが、それは醜いである:'更新your_table セット名=ケース場合、ID = 1、次いで「偽' ID = 2、次いで 'ラム' 他 'ラニ' 端、 年齢=場合、ID = 1、次いで18 ID = 1さもなければ、次いで19 端におけるID(1,2,3 ) ' –

答えて

0

を更新するために、配列に渡すために、我々はそれを行うことができますか?

はい、できます。

すべきですか?

いいえいいえ、それはいい考えです。遅くて非効率的です。

あなたが異なる値でクエリを実行するために数回の値の配列を使用したい場合は、ここで名前のプレースホルダでPDOとプリペアドステートメントでそれを行うための一つの方法は次のとおりです。

(我々はすでに作業を持っていると仮定スクリプトでPDO接続:$dbh

$values = [ 
    [ 
     ':name' => 'sham', 
     ':age' => '18', 
     ':id' => 1 
    ], 
    [ 
     ':name' => 'ram', 
     ':age' => '19', 
     ':id' => 2 
    ], 
    [ 
     ':name' => 'rani', 
     ':age' => '29', 
     ':id' => 3 
    ] 
]; 
$query = "UPDATE some_table SET name = :name, age = :age where id = :id"; 
$sth = $dbh->prepare($query); 
foreach ($values as $set) { 
    $sth->execute($set); 
} 

このコードは、一度クエリを作成し、そして$valuesの値の各セットのためにそれを実行します。ここ

は、名前のプレースホルダ(疑問符)と同じコードである:

$values = [ 
    [ 
     'sham', 
     '18', 
     1 
    ], 
    [ 
     'ram', 
     '19', 
     2 
    ], 
    [ 
     'rani', 
     '29', 
     3 
    ] 
]; 
$query = "UPDATE some_table SET name = ?, age = ? where id = ?"; 
$sth = $dbh->prepare($query); 
foreach ($values as $set) { 
    $sth->execute($set); 
} 
関連する問題