2014-01-14 4 views
0

나는 "questions"라는 배열을 가지고 있는데, foreach를 사용하여 mysql에 삽입하려고한다. 배열은 다음과 같습니다php foreach with SQL

Array 
    (
    [0] => Array 
     (
     [booking_id] => 936 
     [question_id] => a 
     [value] => 4 
     ) 

    [1] => Array 
     (
     [booking_id] => 936 
     [question_id] => b 
     [value] => 3 
     ) 

    [2] => Array 
     (
     [booking_id] => 936 
     [question_id] => c 
     [value] => 2 
     ) 

    [3] => Array 
     (
     [booking_id] => 936 
     [question_id] => d 
     [value] => 1 
     ) 
    ) 

FOREACH는 다음과 같습니다

$sql = array(); 
foreach($_POST['questions'] as $row) { 

    $sql[] = '("'.$row['booking_id'].'", "'.$row['question_id'].'", '.$row['value'].')'; 
} 

mysql_query('INSERT INTO table (booking_id, question_id, value) VALUES '.implode(',', $sql)); 

foreach는 단순히 테이블에 배열의 첫 번째 항목을 삽입하고 전체 배열을 통해 루프를하지 않습니다.

내가 잘못 가고있는 아이디어가 있습니까?

+0

$ _POST에 생각하는 내용이 포함되어 있습니까? – maackle

+0

print_r ($ _ POST [ 'questions']); 위의 배열을 제공 – user3192581

+0

모든 booking_id는 936 ..? –

답변

1

실제로 코드를 복제하여 실제 MySQL 서버에서 완벽하게 실행 시켰습니다. 코드에서 볼 수있는 한 실수는 없습니다.

내가 추측 할 수있는 유일한 문제는 동일한 예약 ID로 여러 레코드를 추가 할 수 없도록하는 고유 색인입니다.

booking_id 필드에 여러 레코드를 추가 할 수 없도록하는 기본/고유 인덱스가 있습니까?

+0

왜 downvotes? 이것은 조사할만한 가치가있는 것처럼 보입니다. – maackle

+0

@maackle 질문에 대해 물어볼 사람이 있으면 의견이어야합니다. 그들이 질문에 대답하려고한다면 대답으로 말해야합니다. –

+0

@ msg7086 - 감사합니다. 그것은 실제로 문제입니다. 많은 감사. 바보 같은 일을 놓치지 마라. – user3192581

2

이미 PDO 또는 MySQLi를 PHP와 함께 사용할 때입니다. 이것은 실제 예입니다. $arr$_POST으로 대체하고 필요에 맞게 리팩토링 할 수 있습니다.

$mysqli = new mysqli('localhost', 'root', '', 'dachi'); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$arr = array(
    array(
    'booking_id' => 936, 
    'question_id' => 15, 
    'value' => 4, 
), 
    array(
    'booking_id' => 936, 
    'question_id' => 15, 
    'value' => 3, 
), 
); 

foreach ($arr as $rec) { 
    $stmt = $mysqli->prepare("INSERT INTO `test` (`booking_id`,`question_id`,`value`) VALUES (?,?,?)"); 
    // You will probably need to change 'iii' 
    // i = integer 
    // s = string 
    // So you might have something like isi if you need like that or sss 
    $stmt->bind_param('iii', $rec['booking_id'], $rec['question_id'], $rec['value']); 
    $d = $stmt->execute(); 
    $stmt->close(); 
} 
+0

mysqli/PDO가 서버에 설치해야합니까? 새로운 프로젝트를 위해 모든 것을 다시 가져 왔고 약간 변경된 것처럼 보입니다! – user3192581

+0

PDO http://www.php.net/manual/en/pdo.setup.php를 설치해야하지만 mysqli 확장은 PHP 버전 5.0.0에서 도입되었습니다. – dachi

+0

Btw, 코드가 안전하지 않습니다. "진부한"소문 : _Nowadays 'everyone'은 보안을 위해 준비된 진술을 사용합니다 _ – dachi

-2
// $sql query value to get data in DB 
$branches= array(); 
$sql = array(); 
while ($row = mysql_fetch_array($sql)) 
{ 
    array_push($question, $row); 

} 
// this part to loop data fetch in sql 
    $branch_type = ''; 
    foreach ($question as $NBU) { 

    $sql[] = '("'.$row['booking_id'].'", "'.$row['question_id'].'", '.$row['value'].')'; 

    } 

    mysql_query('INSERT INTO table (booking_id, question_id, value) VALUES '.implode(',', $sql)); 

는 foreach는 단지 배열 데이터를 읽을 수 있기 때문에 [ '질문'] $ _POST를 사용하지 말아.

+0

하지만 OP *가 배열 데이터를 읽으려고합니다 – maackle

+0

변수가 배열에 있는지 확인하십시오. 하나는 당신이 반복 – Marc