使用PHP将数组插入数据库
我有x,y和z,它们是数组。数据显示正确,但我无法将其插入数据库。它插入适当数量的行作为所有0,而不是用户输入的int值。这里是php使用PHP将数组插入数据库,php,mysql,arrays,Php,Mysql,Arrays,我有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)'; $state
$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。必须在同一索引上插入x值和y,z,如
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();
}
从中,您可以尝试批量插入,如
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;
}
下面是我对这类问题的简单明了的理解:
$sizex = count($x);
$sizey = count($y);
$sizez = count($z);
$maxsize = max($sizex,$sizey,$sizez);
for ($i = 0; $i < $maxsize; $i++) {
$query = 'INSERT INTO table
(x, y, z)
VALUES (:x, :y, :z)';
$statement = $db->prepare($query);
$statement->bindValue(':x', isset($x[$i])?$x[$i]:''));
// check if y value exist on same key
$statement->bindValue(':y', isset($y[$i])?$y[$i]:'');
// check if z value exist on same key
$statement->bindValue(':z', isset($z[$i])?$z[$i]:'');
$statement->execute();
$statement->closeCursor();
}
$sizex=count($x);
$sizey=计数($y);
$sizez=计数($z);
$maxsize=max($sizex,$sizey,$sizez);
对于($i=0;$i<$maxsize;$i++){
$query='插入到表中
(x,y,z)
值(:x,:y,:z)';
$statement=$db->prepare($query);
$statement->bindValue(':x',isset($x[$i])?$x[$i]:'');
//检查同一键上是否存在y值
$statement->bindValue(':y',isset($y[$i])?$y[$i]:'';
//检查同一键上是否存在z值
$statement->bindValue(':z',isset($z[$i])?$z[$i]:'';
$statement->execute();
$statement->closeCursor();
}
这是错误的,因为您将$x迭代到$results,所以$results现在是您需要保存的值。但这里的问题是,为什么外汇兑换为x美元?检索到的值是数组吗?您没有对变量$x
、$y
、$z
执行任何操作,因此,如果它们是数组,则在查询中显然仍然是数组。这可能永远不会发生,但如果$y
或$z
包含的元素多于$x
,该怎么办?我想这是OP的一个问题,数组之间的关系是什么。我认为情况并非如此,因为OP的问题是对$x
使用循环,而不是对其他(y或z)使用循环。所以假设有更少的$y
,特别是$z
。明白了。多谢了,为什么还要费心在循环中不断重写sql字符串和预处理语句呢?