2014-01-14 154 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