While循环和PHP/MYSQL插入语句


While loop and PHP/MYSQL insert statement

我是否能够或如何创建while循环来运行一些insert statemtns。我在下面有一些代码,我试图使用I++,但我不断收到与我放置$I的位置有关的错误,例如:

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

很难解释之前的代码相当于这个插入设置,但基本上我标记了一些变量,然后它们与下面的代码绑定并插入,但我有大约30个thins可以插入,因此while循环。因此,结果应该是supplier_name2-supplier_name 30,地址等相同。

   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;

感谢您的帮助。Ian

表达式$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 );

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

在>"supplier_name.$i"中,点是文字。因此,它变成了"supplier_name.1"、"supplier.name.2"等

":supplier_address".$i中,点不是文字,而是用作连接运算符。因此,您得到了"supplier_name1"answers"supplie_name2"等。因此,我认为不会发生替换。

你能试试吗,在下面的一个表中插入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;