我能够或如何创建一个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;
任何帮助表示赞赏。 伊恩
答案 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;