2011-01-01 19 views
0

データベースの各列を表すキーが配列されています。今私はmysqlの更新クエリを作成する関数が必要です。 forループ内配列をmysql db関数に挿入する

$db['money'] = $money_input + $money_db; 

    $db['location'] = $location 

    $query = 'UPDATE tbl_user SET '; 

      for($x = 0; $x < count($db); $x++){ 

      $query .= $db something ".=." $db something 

      } 

    $query .= "WHERE username=".$username." ";  

答えて

3

あなたはforeachをしたい:

$values = array(); 
foreach($db as $column => $value){ 
    $values[] = $column . "='" . mysql_real_escape_string($value) . "'"; 
} 
$query .= implode(',', $values); 

しかし、これは、あなたがis_numeric最初でテストしたい場合があります(MySQLが自動変換を行うかどうかわからない)文字列としてすべての値を設定します:

if(!is_numeric($value)) { 
    $value = "'" . mysql_real_escape_string($value) . "'"; 
} 
$values[] = $column . "=" . $value; 

アップデート:

設定するたびに文字列の値は、引用符で囲む必要があります。したがって、あなたは書かなければなりません:

$query .= "WHERE username='".$username."'"; 

(一重引用符に注意してください)。

sprintfを使用すると、すべてのことをはっきりと確認できます。 thisよう

+0

+1「implode」は最もエレガントな方法だと思われます。 – DrColossos

+0

@DrColossosいいえ、そうではありません。 –

+0

@Col。 Shrapnel:私はこれを後悔するつもりだが、楽しみのためだけであることを知っている。その生産的なコメントをありがとう。私はこの質問に対するあなたの答えを読むことを楽しみにしています。 –

0

ような何かあなたは配列要素の名前を抽出するためにarray_keysを使用して、単にのようなものを使用することができます...

$query .= $keys[$x] . '="' . mysql_real_escape_string($db[$keys[$x]]) .'" '; 

...。

(あなたが上記の$デシベル値を定義した後、私は... ...

$keys = array_keys($db); 

の存在を推定しました。)

前記、私は本当に私はそのような "ワンサイズフィット"のアプローチをお勧めしたいとは思っていません。

0

何か:

function mysql_update_array($table, $data, $id_field, $id_value) { 
    foreach ($data as $field=>$value) { 
     $fields[] = sprintf("`%s` = '%s'", $field, mysql_real_escape_string($value)); 
    } 
    $field_list = join(',', $fields); 

    $query = sprintf("UPDATE `%s` SET %s WHERE `%s` = %s", $table, $field_list, $id_field, intval($id_value)); 

    return $query; 
} 

コードは私ではありませんのでご注意ください!

+0

@ 2astalavista、なぜ説明するのか?あなたは私たちがすべてここに学んでいることを知っています... – ifaour

+0

@ 2astalavistaだからあなたは*コードが醜いと思うので、ソリューションを投票しましたか? :-) – ifaour

+0

ところで、編集されるまで元に戻すことはできません –

0
foreach($array as $attr => $val) 
    $items[] = "$attr='$val'";  
mysql_query("INSERT INTO table SET ".implode(',', $items)); 
関連する問題