【问题标题】:Loop over an insert Query in PHP [duplicate]在PHP中循环插入查询[重复]
【发布时间】:2012-04-30 20:16:48
【问题描述】:

我无法通过 PHP 脚本在 SQL 中插入 N 次相同的值。 我有这个vslue?

Table Info  column (ID,Name, LastName,)
Valus ('',Alain,Alian);

我想要做的是在同一个表中插入这个值 10 次使用 E.G 的 While 循环 或类似的东西 有什么想法吗?

<?php
    $i=1;
    While ($i<= 5)      
    {
       $sql="INSERT INTO arivage
          (ID_Ship,Date_ariv,Date_achat,prov_id,Sph,cyl,Prod_type,Pord_color)
          VALUES
          ('','$date','$date1','$prov_id','$sph','$cyl','$Prod_type','$Pord_color')";
       $i++;
    }
?>

【问题讨论】:

    标签: php mysql html sql


    【解决方案1】:

    试试这个..这可能有效

    $sql= "INSERT INTO TABLE_NAME(field1,field2) VALUES( ";
        for($i=0;$i<10;$i++)
        {
           $sql.="('value1', 'value2'), "
        }
        $sql.=" )";
    

    【讨论】:

    • 我认为它应该就像 values(),(),() 一样。 . .等
    • 最后一次迭代将添加逗号,查询将以 ('value1', 'value2'), ) 结束。我认为这会产生错误。
    【解决方案2】:

    你有什么错误吗?

    你需要的是可行的

    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if (!$link) {
      die('Could not connect: ' . mysql_error());
    }
    
    for($i = 0; $i<10; $i++) {
        $sql="INSERT INTO arivage (ID_Ship,Date_ariv,Date_achat,prov_id,Sph,cyl,Prod_type,Pord_color) VALUES ('','$date','$date1','$prov_id','$sph','$cyl','$Prod_type','$Pord_color')";
        $result = mysql_query($sql);
        if (!$result) {
         die('Invalid query: ' . mysql_error());
        }
    }
    

    【讨论】:

      【解决方案3】:

      你应该添加

      mysql_query($sql);
      

      到您的代码,以便在循环之间执行查询。

      $i=1;
      While ($i<= 5)      
      {
       $sql="INSERT INTO arivage
       (ID_Ship,Date_ariv,Date_achat,prov_id,Sph,cyl,Prod_type,Pord_color)
       VALUES('','$date','$date1','$prov_id','$sph','$cyl','$Prod_type','$Pord_color')";
      
       mysql_query($sql);
      
          $i++;
      }
      

      【讨论】:

        【解决方案4】:

        我假设你已经连接到数据库(通过使用 mysql_connect() + mysql_select_db()),并且在组合之后执行你的查询(通过 mysql_query($sql))。

        我需要知道 ID_Ship 列的数据类型是什么?这是 PRIMARY KEYauto_increment 吗?如果是,那么您需要从以下位置更改您的查询:

        INSERT INTO arivage (ID_Ship,Date_ariv,Date_achat,prov_id,Sph,cyl,Prod_type,Pord_color) 
        VALUES ('','$date','$date1','$prov_id','$sph','$cyl','$Prod_type','$Pord_color')
        

        到:

        INSERT INTO arivage (Date_ariv,Date_achat,prov_id,Sph,cyl,Prod_type,Pord_color) 
        VALUES ('$date','$date1','$prov_id','$sph','$cyl','$Prod_type','$Pord_color');
        

        注意:ID_ship 被移除,'' 也被移除。

        此删除是为了防止为第二、第三等记录插入相同的主键。请记住,主键必须是唯一的。不指定它将让 MySQL 插入生成的值(因为它是 auto_increment)。

        【讨论】:

          【解决方案5】:

          如果你需要在这里绑定参数是另一种方式。

          public function insert($rows) 
              {
                  $setValues = null;
              
                  foreach($rows as $column => $value) 
                  {
                    $setValues .= "{$column}=:{$column},";
                  }
          
                  $setValues = rtrim($setValues, ',');
          
                  $query = "INSERT INTO {$this->_table} SET {$setValues}";
          
                  $stmt = $this->_conn->prepare($query);
          
                  foreach($rows as $col => $val) 
                  {
                      $stmt->bindParam(":{$col}", $val);
                  }
                
                  $stmt->execute();
              }
          

          【讨论】:

          • 为什么需要分块循环?
          • 有时您需要一次添加多个值。另外,您还需要绑定您的参数。循环使用给定值准备和构建查询,并在执行查询之前绑定它们。
          猜你喜欢
          • 2014-09-29
          • 1970-01-01
          • 2013-07-10
          • 2016-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-08
          • 2014-10-03
          相关资源
          最近更新 更多