2010-12-31 11 views
0

データベースに配列を追加したい。 db(例:healthおよびmoney)の値が変更されたかどうかをチェックする関数を設定しました。値がオリジナルと異なる場合は、新しい値を$db配列に追加します。このように$db['money'] = $money_input + $money_db;配列をmysqlデータベースに挿入するPHP

function modify_user_info($conn, $money_input, $health_input){ 
(...) 
if ($result = $conn->query($query)) { 
    while ($user = $result->fetch_assoc()) { 
     $money_db = $user["money"]; 
     $health_db = $user["health"]; 
    } 
    $result->close(); 

    //lag array til db med kolonnene som skal fylles ut som keys i array 
    if ($user["money"] != $money_input){ 
     $db['money'] = $money_input + $money_db; 
     //0 - 20 
     if (!preg_match("/^[[0-9]{0,20}$/i", $db['money'])){ 
      echo "error"; 
      return false; 
     } 

    } 
    if ($user["health"] != $health_input){ 
     $db['health'] = $health_input + $health_db; 
     //0 - 4 
     if (!preg_match("/^[[0-9]{0,4}$/i", $db['health'])){ 
      echo "error"; 
      return false; 
     } 
     if (($db['health'] < 1) or ($db['health'] > 1000)) 
     { 
      echo "error"; 
      return false;  
     } 
    } 

$dbのキーは、データベースの列を表します。今度は、配列$dbのキーを取得し、それらをdbに挿入する関数を作成したいと思います。このようなもの ?

$query = "INSERT INTO `main_log` (`id` , "; 
foreach(range(0, x) as $num) { 

    $query .= array_key.", ";  
} 
$query = substr($query, 0, -3); 
    $query .= " VALUES ('', "; 
    foreach(range(0, x) as $num) { 

     $query .= array_value.", ";  
    } 
    $query = substr($query, 0, -3); 
    $query .= ")"; 

答えて

1

idフィールドがすでに自動インクリメント値となるように設定されている場合は、あなたが(それだけの上に乗らされていないと仮定されてINSERTコマンドでそれを宣言する必要はありません、とでいっぱいになります自動インクリメント値)。

$dbが連想配列であり、要素キーがSQLフィールド名と同じであり、要素値がこれらのSQLフィールドの望ましい値であると仮定します。

# Sanitise the Array 
$db = array_map('mysql_real_escape_string' , $db) 
# Create the SQL Query 
$query = 'INSERT INTO `main_log` '. 
     '(`'.implode('` , `' , array_keys($db)).'`) '. 
     'VALUES '. 
     '("'.implode('" , "' , $db).'")'; 

これは、必要な作業を実行するSQLクエリを生成するはずです。さらに、SQLインジェクション攻撃の可能性を減らす必要があります。

(注:上記の改行などは読みやすくするためだけのものであり、削除することができます)

関連する問題