2010-12-31 2 views
0

Я хочу добавить массив в свой db. Я установил функцию, которая проверяет, изменилось ли значение в 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 представляют colums в моей базе данных. Теперь я хочу сделать функцию, которая берет ключи в массиве $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 поле уже установлено, что значение Auto-Increment, вам не нужно объявлять его в команде INSERT (это только предполагается, как не подавляться, и заполнит с auto-incremented value).

Предполагая, что $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 Injection ...

(Примечание: разрывы строк и т. Д. Выше приведены только для чтения и могут быть удалены.)

Смежные вопросы