2014-01-14 196 views
0

我有一個名爲「問題」,我試圖INSERT到MySQL與foreach的數組。陣列看起來像這樣:PHP與foreach的foreach

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服務器上運行,沒有代碼中的錯誤,據我所見。

我唯一能猜到的問題是一個唯一的索引,它可以防止在同一個booking_id下添加多條記錄。

在booking_id字段中是否存在阻止添加多個記錄的主/唯一索引?

+0

爲什麼downvotes?這似乎是值得研究的東西。 – maackle

+0

@mackle如果有人有問題要問,應該是一個評論。如果他們試圖回答這個問題,那麼它應該作爲一個答案。 –

+0

@ msg7086 - 謝謝。這確實是問題。非常感謝。愚蠢的事情錯過。 – user3192581

2

現在已經是時候用PHP來使用PDO或MySQLi了。 這是一個工作示例。您可以用$_POST替換$arr並重構一下以滿足您的需求。

$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

順便說一句,你的代碼是不安全的。謠言是「非常」:現在「每個人」都在使用我準備好的安全聲明_ – 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)); 

不使用$ _ POST [ '問題'],因爲的foreach只讀陣列數據。

+0

但OP *想要*讀取陣列數據 – maackle

+0

嘗試查看該變量是否在數組中。你循環的那個 – Marc