如何在MySQL中将PHP数组中的值存储为多条记录

如何在MySQL中将PHP数组中的值存储为多条记录,php,arrays,function,Php,Arrays,Function,我创建了一个PHP函数,将数据插入MySQL表。传递到函数中的值之一是数组。该数组仅包含唯一值。当我运行脚本时,它会将一条记录保存到表中,其中的字段对应于存储所有数组值的数组 这是我的函数,它位于单独的类文件中: public function importTest($val1,$valArray,$val3){ try { $stm = $this->dbSt->prepare('INSERT INTO table (val1,valArray,val3

我创建了一个PHP函数,将数据插入MySQL表。传递到函数中的值之一是数组。该数组仅包含唯一值。当我运行脚本时,它会将一条记录保存到表中,其中的字段对应于存储所有数组值的数组

这是我的函数,它位于单独的类文件中:

public function importTest($val1,$valArray,$val3){

    try {

        $stm = $this->dbSt->prepare('INSERT INTO table (val1,valArray,val3) VALUES (:val1,:valArray,:val3)');

        $stm->bindParam(':val1',$val1);
        $stm->bindParam(':valArray',$valArray);
        $stm->bindParam(':val3',$val3);

        if($stm->execute()){

            return true;
        }

    }catch (PDOException $e) {

        echo $e->getMessage();
    }


    return false;

}
设置
$test
并回显屏幕以进行测试。这将显示数组中我要查找的所有唯一值:

$test = implode("<br />", (array_keys($array_unique_guests)));

echo 'TEST:<br /> '.$test.' <br />';  // Displays all unique values
echo '<br /><br />';
我使用for循环获取调用另一个函数的
$getSites
的值

public function importTest($val1,$valArray,$val3){

    try {

        $stm = $this->dbSt->prepare('INSERT INTO table (val1,valArray,val3) VALUES (:val1,:val2,:val3)');

        $stm->bindParam(':val1',$val1);
        $stm->bindParam(':val2',$val2);
        $stm->bindParam(':val3',$val3);

        foreach ($valArray as $val2) {
            $stm->execute();
        }
    }catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }
    return true;
}
我需要将所有值作为$test作为新记录保存在表中,并作为$test返回到上面的屏幕。相反,它们都被添加到一个记录中

我想在数组中插入尽可能多的行。此数字将更改,但例如,如果数组中有10个值,则应向表中添加10条记录,以及一个日期和另一个字段。基本上,我试图检索数组中的所有值,并在脚本运行时为每个值创建一个新记录

我希望这是清楚的。我已经在这上面呆了一段时间了,希望有人能帮我


谢谢

将数组传递给函数,而不是内爆字符串,然后在函数中使用循环

public function importTest($val1,$valArray,$val3){

    try {

        $stm = $this->dbSt->prepare('INSERT INTO table (val1,valArray,val3) VALUES (:val1,:val2,:val3)');

        $stm->bindParam(':val1',$val1);
        $stm->bindParam(':val2',$val2);
        $stm->bindParam(':val3',$val3);

        foreach ($valArray as $val2) {
            $stm->execute();
        }
    }catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }
    return true;
}
您可以使用以下命令直接传递数组:

$statsDao->importTest($getSites[$x]['site_id'], array_keys($array_unique_guests), $updateDate);

到目前为止,我可以从标题中猜到

 $inser = "INSERT INTO table_name(id,name,pass) VALUES";
    $valuearray = array( // the array composed of values that you have prepared
          [  
            "id"  => 1,
            "name" => "John Due",
            "pass" => "123456"
          ],
          [  
            "id"  => 2,
            "name" => "Jonathan",
            "pass" => "123456"
          ],
          [  
            "id"   => 3,
            "name" => "Jonny",
            "pass" => "123456"
          ]
    ); 
    foreach($valuearray as $val)
    {
      $inser .= "('".$val['id']."','".$val['name']."','".$val['pass']."')";
    }
    echo $inser;

要开始传入字符串
$test
,请确保传入要存储的值数组。。。VALUES(),()[,…]可以在MYSQL中插入多条记录。如果我理解了,您想循环数组,数组中的每个元素-向数据库添加一行该值?是的,这是正确的Jaquarh-向表中添加一行,其中包含数组中的每个元素。我不知道如何传入数组而不是字符串将导致通知。哪里定义了
$val2
?它在
for
循环中
bindParam
绑定引用,以便以后分配。任何有效的循环都可以,我将其编辑为更通用的“它在for循环中。bindParam绑定引用,以便以后分配”实际上
public bool PDOStatement::bindParam(mixed$parameter,mixed&$variable[,int$data_type=PDO::PARAM_STR[,int$length[,混合$driver\u选项]]]
现在我明白了,
&$variable
之前我没有注意到它,它确实是一个引用,这就是
bindParam
bindVal
之间的区别。原始代码使用一个预处理语句,它可以防止SQL注入。为什么要降级到变量串联?另外,
$valArray
只是用于第二列,其他两列来自
$val1
$val2
,它们在每一行中都是相同的。