使用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,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。

必须在同一索引上插入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字符串和预处理语句呢?