我有x,y和z是数组.数据显示正常但我无法将其插入到我的数据库中.它插入适当数量的行作为全0,而不是用户输入的int值.这是php.
$x = $_POST['x'];
$y = $_POST['y'];
$z = $_POST['z'];
foreach($x as $result){
$query = 'INSERT INTO table
(x, y, z)
VALUES (:x, :y, :z)';
$statement = $db->prepare($query);
$statement->bindValue(':x', $x);
$statement->bindValue(':y', $y);
$statement->bindValue(':z', $z);
$statement->execute();
$statement->closeCursor();
}
我收到此错误:注意:数组转换为字符串
它位于所有3个bindValue行上
我知道foreach是错误的,但这是我接近的唯一循环.给我适当的行数,但只将0插入数据库.
最佳答案 你必须在同一个索引上插入带有y,z的x值,比如
foreach($x as $key=>$xval){
$query = 'INSERT INTO table
(x, y, z)
VALUES (:x, :y, :z)';
$statement = $db->prepare($query);
$statement->bindValue(':x', $xval);
// check if y value exist on same key
$statement->bindValue(':y', isset($y[$key]) ? $y[$key] : '');
// check if z value exist on same key
$statement->bindValue(':z', isset($z[$key]) ? $z[$key] : '');
$statement->execute();
$statement->closeCursor();
}
从Bulk Insert Prepared Statements你可以尝试批量插入,如,
try {
$sql="INSERT INTO table (x, y, z) VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($x as $key=>$xval ) {
$insertQuery[] = '(?,?,?)';
$insertData[] = $xval;
$insertData[] = isset($y[$key])?$y[$key]:'';
$insertData[] = isset($z[$key])?$z[$key]:'';
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $this->db->prepare($sql);
$stmt->execute($insertData);
$stmt->closeCursor();
}
} catch (PDOException $e) {
error_log('Error reading the session data table in the session reading method.');
error_log(' Query with error: '.$sql);
error_log(' Reason given:'.$e->getMessage()."\n");
return false;
}