2010-12-31 4 views
0

데이터베이스에 배열을 추가하고 싶습니다. db (예 : healthmoney)의 값이 변경되었는지 확인하는 함수를 설정했습니다. 값이 원본과 다른 경우 $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 주입 공격의 가능성을 줄여야합니다.

(참고 : 위의 줄 바꿈 등은 읽기 전용이므로 제거 할 수 있습니다.)

관련 문제