2014-11-19 1 views
0

여분의 행을 삽입하지만, 데이터베이스에 삽입 동일한 기능을 사용겉으로 동일한 SQL PHP에서 쿼리,하지만 하나의 내가 두 가지 방법으로 아래의 쿼리를 생성

INSERT 사람 값으로 ('', ' 존, 스미스, 뉴욕, 뉴욕, 123456);

SQL 데이터베이스에 별도의 빈 행이 CORRECT 삽입물의 아래에있어서의 결과,

foreach($_POST as $item) 
$statement .= "'$item', "; 

$size = count($statement); 
$statement = substr($statement, 0, $size-3); 
$statement .= ");"; 

아래 상술 한 것과 동일한 질의를 생성한다 코드 (그들이 동일 에코)하지만 때 나는 그것을 사용하여, ID가있는 여분의 빈 행이 데이터가있는 올바른 행 뒤에있는 데이터베이스에 삽입됩니다. 매번 두 행이 삽입됩니다. 나는 양식에서 게시 된 항목에 대한 검증을 실행하고 데이터베이스에 저장하기 전에 몇 가지 조작을 수행해야 할 필요가 있기 때문에

$mytest = "INSERT INTO person VALUES('','$_POST[name]', '$_POST[address]','$_POST[city]', '$_POST[state]', '$_POST[zip]');"; 

, 나는 두 번째 쿼리 방법을 사용할 수 있어야합니다.

두 가지가 어떻게 다른지 이해할 수 없습니다. 나는 똑같은 함수를 사용하여 데이터베이스에 연결하고 삽입하므로 문제가있을 수 없습니다.

아래 참조 내 삽입 기능입니다 :

function do_insertion($query) {  
    $db = get_db_connection(); 
     if(!($result = mysqli_query($db, $query))) { 
      #die('SQL ERROR: '. mysqli_error($db)); 
      write_error_page(mysqli_error($db)); 
      } #end if  
    } 

는 여기에 대한 INSITE/도움을 주셔서 감사합니다.

+0

솔직히 문제를 볼 수 없지만 제공하지 않은 코드에 문제가있을 수 있습니다. –

+0

함수와 같은 소리가 두 번 호출됩니다. 그러나 우리는 당신의보기에서 그것을 볼 수 없습니다. 한 번만 값없이. – xQbert

+1

** 경고 ** : mysqli를 사용할 때 매개 변수가있는 쿼리와 ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php)을 사용하여 사용자를 추가해야합니다 데이터를 쿼리에 추가하십시오. ** 심각한 [SQL injection bug] (http://bobby-tables.com/)를 만들므로 문자열 보간을 사용하여 **이를 수행하지 마십시오. **'$ _POST' 데이터를 쿼리에 직접 입력하지 마십시오. – tadman

답변

1

쿼리에서 $ _POST를 직접 사용하면 많은 나쁜 것들이 열리게됩니다. 단지 나쁜 습관 일뿐입니다. 적어도 데이터베이스로 이동하기 전에 데이터를 지우는 데 필요한 작업을 수행해야합니다.

$ _POST 변수에는 브라우저, 양식 제출에 따라 추가 값이 포함될 수 있습니다. foreach에서 null/empty 체크를 시도 했습니까?

~ ~ 의사 코드 ~에서 사용하지 마십시오 ~!

foreach($_POST as $item) 
{ 

    if(isset($item) && $item != "") 
    { 
     $statement .= "'$item', "; 

     $size = count($statement); 
     $statement = substr($statement, 0, $size-3); 
     $statement .= ");"; 
    } 

} 

는 bind_param를 사용하여 SQL 주입으로부터 자신을 보호하는 방법에 대한 @의 tadman의 코멘트를 읽어 보시기 바랍니다. 질문에 대답하기 위해 $ _POST에 쿼리에 넣을 빈 데이터가 들어있어 추가 행이 생길 수 있습니다.

+0

경고 해 주셔서 감사합니다. – amarkov

0

@yycdev가 명시한대로 SQL 주입의 위험이 있습니다. reading this에서 시작하여 데이터베이스를 적절히 보호하여 코드를 다시 작성하십시오. SQL 삽입은 재미 없으며 많은 버그를 생성합니다.

+1

자원에 감사드립니다. 나는 이것으로 초보자 다. 그래서 모든 것이 도움이된다. – amarkov

관련 문제