2014-02-23 3 views
1

내가 할 수 있기를 원하는 것은 입력 된 배열을 기반으로 값을 삽입하는 준비된 명령문을 작성하는 것입니다. 배열은 동적입니다. 내가 동적 인 것을 의미하는 것은 단지 아래에 주석 처리 된 것과 같은 여분의 라인을 포함함으로써 배열 $table을 변경하는 능력이며 얼마나 많은 것이 존재하는지에 관계없이 값을 적절히 보내고 테이블에 삽입합니다. 그 불안과 SQL 인젝션에 열려 있기 때문에동적 배열로 MySQLi prepared statement를 어떻게 실행합니까?

INSERT INTO table ($fields) VALUES ($data) 

: 때문에 준비된 명령문의 나의 새로운 사용의 난 그냥 내 이전의 방법을 사용할 수 없습니다.

$table = array(); 
$table['Favorite_Chocolate']  = 'Milk'; 
$table['Favorite_Cake']   = 'Vanilla'; 
$table['Favorite_IceCream']  = 'Neapolitan'; 
//$table['Favorite_Candy']  = 'Taffy'; 

function magic_insert ($table, $dbc) { 

    if ($stmt = mysqli_prepare($dbc, "INSERT INTO mytable (?, ?, ?) VALUES (?, ?, ?)")) { 
      mysqli_stmt_bind_param($stmt, "ssssss", $1, $2, $3, $4, $5, $6); 
      $1 = array_keys($table)[0]; 
      $2 = array_keys($table)[1]; 
      $3 = array_keys($table)[2]; 
      $4 = array_values($table)[0]; 
      $5 = array_values($table)[1]; 
      $6 = array_values($table)[2]; 

      mysqli_stmt_execute($stmt); 
      mysqli_stmt_close($stmt); 
     } 
    } 
+0

fyi - 열 이름을 바인드 할 수있는 데이터베이스가 없습니다. 확실히 MySQL은 실 거예요. – goat

+0

@rambocoder 이것은 간단한 예제 스크립트입니다. $ table 키가 코드에 의해 설정되고 사용자 입력을 통해 설정되지 않기 때문에 아마도 직접 입력 할 것입니다. – Darkaaja

+0

열 이름을 바인드 할 수 없으므로 쿼리에 필요한 값을 바인딩 할 수 있습니다. 실제로 열 이름을 변경해야한다면'mysqli_real_escape_string()'을 사용하여 열 이름과 값을 보호하고 연결을 통해 질의를 구성 할 수있다. 범인이이 점에 대해 불평 할 것이 틀림 없지만 적절하게 수행하면 이것이 안전합니다. –

답변

관련 문제