使用foreach循环插入mysql数据

时间:2013-04-13 11:09:49

标签: php mysql if-statement insert foreach

我使用此代码成功插入记录:

 foreach($R as $k=>$v)
 {
     $test_id = str_replace('rep_result_', '', $k);
     if(strstr($k, 'rep_result_'))
     {      
         $content = $v; 
         $SQL = "INSERT INTO report SET
             rep_te_id   = '$test_id',
             rep_result  = '$content',
             record_id = '$R[payment_id]',
             rep_date    = '$dt'";

但现在我的表中有两个额外的字段,remarknor。所以现在,为了插入我创建此代码的所有数据:

foreach($R as $k=>$v)
{
    $test_id = str_replace('rep_result_', '', $k);
    if(strstr($k, 'rep_result_'))
    {
        $content = $v; 
        if(strstr($k, 'remark_'))
   {
         $remark=$v;
         if(strstr($k, 'nor_'))
         {
             $nor=$v;
         $SQL = "INSERT INTO report SET
                 rep_te_id   = '$test_id',
             rep_result  = '$content',
             record_id = '$R[payment_id]',
             remark  = '**$remark**',
             nor  = '**$nor**',                    
             rep_date    = '$dt'";

我在数据库中没有得到任何东西。这里并非一切都好。如果我只使用一个if条件,则会插入数据(rep_result,remark,nor any one)

if(strstr($k, 'remark_'))
   $remark=$v;

但是当我使用所有这三个条件时,什么都没有存储。我知道我有if语句或foreach循环问题。

4 个答案:

答案 0 :(得分:2)

正如其他人所说,您的SQL语法基本上是不正确的(混合INSERT和UPDATE语法)。单行插入语句将具有如下结构:

INSERT INTO report (rep_te_id, rep_result, record_id, rep_date )
VALUES ( '$test_id', '$content', '$R[payment_id]', '$dt' )

请阅读准备好的语句,MySQLi和PDO,以了解有关数据库服务器性能和有效使用的更多信息。

此外,就一般而言,从循环内向数据库发送大量独立的SQL语句可能是巨大的性能问题。与每个调用相关联的通信和连接开销与您希望数据库服务器执行的实际数据插入工作无关。

MySQL允许您使用相同的语句插入多行,因此您可以在循环中构建单个SQL语句,然后将一次调用中的所有插入发送到数据库。

使用一个语句插入多行的语法如下:

INSERT INTO report (rep_te_id, rep_result, record_id, rep_date )
VALUES ( '1', 'Row 1 content', '1', '2013-04-15' ),
( '2', 'Row 2 content', '2', '2013-04-15' ),
( '3', 'Row 3 content', '3', '2013-04-15' ),
( '4', 'Row 4 content', '4', '2013-04-15' );

有关文档和更多示例,请参阅:

http://dev.mysql.com/doc/refman/5.5/en/insert.html

https://stackoverflow.com/a/6889087/618649

https://stackoverflow.com/a/1307652/618649

答案 1 :(得分:1)

您的INSERT查询语句有错误。 我无法测试您的代码,但我认为您的条件在这里工作是mysqli连接和INSERT查询的示例。

    //opening connection
    $mysqli = new mysqli($dbserver, $dblogin, $dbpassword, $dbname);
    if (mysqli_connect_errno()) 
    {
        printf("Connection failed: %s\n", mysqli_connect_error());
        exit();
    }

    foreach($R as $k=>$v)
    {
        $test_id = str_replace('rep_result_', '', $k);
        if(strstr($k, 'rep_result_'))
        {
            $content = $v; 
            if(strstr($k, 'remark_'))
            {
                  $remark=$v;
                  if(strstr($k, 'nor_'))
                  {
                      $nor=$v;

                      $SQL = "INSERT INTO report (`rep_te_id`, `rep_result`, `record_id`, `remark`, `nor`, `rep_date`) VALUES ('".$test_id."', '".$content."', '".$R['payment_id']."', '".$remark."', '".$nor."', '".$dt."')";
                      echo $SQL   //let's see the query
                      $mysqli->query($SQL) or die($msqli->error.__LINE__);
                  }
            }
        }
    }

如您所见,我在echo语句后面放置了$SQL,以查看您的条件是否匹配。如果不打印查询,那么yuo对所有if条件

都有问题

答案 2 :(得分:1)

嘿伙计你的插入查询语法是错误的用户正确并学习一些SQL查询语法

INSERT INTO report (rep_te_id,rep_result,remark,nor,rep_date) VALUES ('$test_id','$content','$R[payment_id]','**$remark**','**$nor**','$dt');

答案 3 :(得分:0)

尝试为每个if条件实现一个else并尝试回显来自他们的东西,因为看起来像你的任何条件都没有得到满足。

我建议你只从其他三个回复$ k,因为你将能够知道$ k的当前值。

还指定别号。在echo中,你将能够得到其他被调用的东西。