1

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

 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'";

但是现在我的表中有两个额外的字段,remark并且nor. 所以现在,为了插入所有数据,我编写了以下代码:

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

4 回答 4

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

于 2013-04-13T11:52:07.610 回答
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以查看您的条件是否匹配。如果查询不会被打印,那么你对所有这些if条件都有问题

于 2013-04-13T11:27:12.270 回答
1

嘿伙计,您的插入查询语法错误用户正确并学习一些 sql 查询语法

INSERT INTO report (rep_te_id,rep_result,remark,nor,rep_date) VALUES ('$test_id','$content','$R[payment_id]','**$remark**','**$nor**','$dt');
于 2013-04-13T11:32:09.757 回答
0

尝试为您的每个 if 条件实现 else 并尝试从它们中回显某些内容,因为看起来您的任何 If 条件都没有得到满足。

我建议您仅从所有其他三个中回显 $k,因为您将能够知道 $k 的当前值。

还指定其他没有。在回声中,您将能够获得其他被调用的内容。

于 2013-04-13T11:21:54.120 回答