Вставить массив в базу данных MySQL PHP - PullRequest
0 голосов
/ 31 декабря 2010

Я хочу добавить массив в мою базу данных.Я настроил функцию, которая проверяет, изменилось ли значение в БД (например, health и money).Если значение отличается от исходного, я добавляю новое значение в массив $db.Как это $db['money'] = $money_input + $money_db;.

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 и вставляет их в БД.Как то так?

$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 Ответ

1 голос
/ 31 декабря 2010

Если в поле 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-инъекций ...

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

...