while循环和PHP / MYSQL插入语句

时间:2013-11-18 14:00:54

标签: php mysql insert while-loop

我能够或如何创建一个while循环来运行一些插入状态。我在下面有一些代码,我尝试使用i ++,但我不断收到与我放置$ i的错误相关的错误:

  

PDOStatement类的对象无法转换为字符串

很难解释之前的代码相当于这个插入设置,但基本上我decalre一些变量然后他们得到绑定并插入以下代码但我有30个可以插入因此while循环。所以结果应该是supplier_name2 - supplier_name30,地址等等。

   while ($i <= 30):
      //LINE TWO
      $suppliername = $this->supplier_name.$i;
      if(!empty($suppliername)){
          $sql0.$i = "INSERT INTO suppliers (supplier_name, supplier_address) 
                          VALUES (:supplier_name.$i, :supplier_address.$i) ";   
          $st0.$i = $conn->prepare ( $sql0.$i );
          $st0.$i->bindValue( ":supplier_name".$i, $this->supplier_name.$i, PDO::PARAM_STR );
          $st0.$i->bindValue( ":supplier_address".$i, $this->supplier_address.$i, PDO::PARAM_STR);
          $st0.$i->execute();
          $this->id = $conn->lastInsertId();
          $supplierid.$i = $this->id = $conn->lastInsertId();
        }  
    $i++; 
    endwhile;

任何帮助表示赞赏。 伊恩

3 个答案:

答案 0 :(得分:1)

表达式$sql0.$i将被解释为字符串,因此PHP将尝试将您的PDOStatement用作字符串。 这不是您应该使用prepared statements的方式。

在循环前移动prepared statement并进行一些修改。

$sql = "INSERT INTO suppliers (supplier_name, supplier_address) 
                      VALUES (:supplier_name, :supplier_address) ";   
$statement = $conn->prepare ( $sql );

然后在bindValue()变量上执行execute()$statement。想法是宣布一次并使用几次。 也不要在属性名称中使用$i,这是不必要的。

答案 1 :(得分:0)

在&gt; "supplier_name.$i"点是字面的。所以它变成“supplier_name.1”,“supplier_name.2”等

":supplier_address".$i中,点不是文字,它用作连接运算符。因此,您将获得“supplier_name1”和“supplier_name2”等。因此,我认为不会发生替换。

答案 2 :(得分:0)

您可以在表格中的一个插入supplier_name1 - supplier_name30下面试试这个。

          while ($i <= 30):
              //LINE TWO
              $suppliername = $this->supplier_name.$i;
              $supplier_address = $this->supplier_address.$i;
              if(!empty($suppliername)){
                $sql0 = "INSERT INTO suppliers (supplier_name, supplier_address)
                VALUES (:supplier_name, :supplier_address) ";
                $st0 = $conn->prepare ( $sql0 );
                $st0->bindValue( ":supplier_name", $suppliername, PDO::PARAM_STR );
                $st0->bindValue( ":supplier_address", $supplier_address, PDO::PARAM_STR);
                        $st0.$i->execute();
                        $this->id = $conn->lastInsertId();
                $supplierid = $this->id = $conn->lastInsertId();
              }
              $i++;
          endwhile;