Php 如何将从窗体检索的数组保存到数据库

Php 如何将从窗体检索的数组保存到数据库,php,database,laravel-5.4,Php,Database,Laravel 5.4,我有一个带有输入表的表单,将这些数据保存到数据库表的最佳方式是什么? 形式如下: <form action="/test" method="post"> {{ csrf_field() }} <table> <tr> <td><input type="text" name="name[]"></td> <td><input type="text" name="last

我有一个带有输入表的表单,将这些数据保存到数据库表的最佳方式是什么? 形式如下:

<form action="/test" method="post">
{{ csrf_field() }}
<table>
    <tr>
        <td><input type="text" name="name[]"></td>
        <td><input type="text" name="lastname[]"></td>
    </tr>
    ....
    <tr>
        <td><input type="text" name="name[]"></td>
        <td><input type="text" name="lastname[]"></td>
    </tr>
    <tr>
        <td colspan="2">
            <button type="submit">Save</button>
        </td>
    </tr>
</table>
{"_token": "0cDahM09i0f6KPV7l2jsRHIYrSg0TwRccJc8YHuH",
"name": [
    "name1",
    "name2",
    "name3",
    "name4"
],
"lastname": [
    "lastname1",
    "lastname2",
    "lastname3",
    "lastname4"
]}
   // Create database connection and prepare the parameterized query
    $pdo = Database::connect() ; 
    $query = "INSERT INTO myTable (name, lastname) VALUES (:name, :lastname)"
    $pdo->prepare($query) ;

    //foreach "row" in your array, execute the query
    foreach($valueArray as $row){
        $pdo->execute($row) ;
    }

   //disconnect from database
   Database::disconnect() ;

通常,对于数据库表,您希望数组的格式如下:

$valueArray = array(
       array(
       ':name'=>name1 , 
       ':lastname'=>lastname1 
        ) , 
       array(
       ':name' => name2 ,
       ':lastname' => lastname2
       )
    )
(不确定您使用代币的目的,因此被排除在外)

数据已格式化为数据库的“行”,每行组成一个数组,然后可以使用PDO(或mysqli)插入数据,函数如下:

<form action="/test" method="post">
{{ csrf_field() }}
<table>
    <tr>
        <td><input type="text" name="name[]"></td>
        <td><input type="text" name="lastname[]"></td>
    </tr>
    ....
    <tr>
        <td><input type="text" name="name[]"></td>
        <td><input type="text" name="lastname[]"></td>
    </tr>
    <tr>
        <td colspan="2">
            <button type="submit">Save</button>
        </td>
    </tr>
</table>
{"_token": "0cDahM09i0f6KPV7l2jsRHIYrSg0TwRccJc8YHuH",
"name": [
    "name1",
    "name2",
    "name3",
    "name4"
],
"lastname": [
    "lastname1",
    "lastname2",
    "lastname3",
    "lastname4"
]}
   // Create database connection and prepare the parameterized query
    $pdo = Database::connect() ; 
    $query = "INSERT INTO myTable (name, lastname) VALUES (:name, :lastname)"
    $pdo->prepare($query) ;

    //foreach "row" in your array, execute the query
    foreach($valueArray as $row){
        $pdo->execute($row) ;
    }

   //disconnect from database
   Database::disconnect() ;
请注意,在第一段代码的数据数组中,我已经将“name”和“lastname”更改为参数“:name”和“:lastname”(注意冒号前面),这允许我们使用准备好的语句——这防止了客户端的sql注入。具体的prepare()和execute()函数根据您使用的数据库连接类型而有所不同,有些函数需要中间bindParam()调用,但是在其他地方有很多关于使用prepared语句的指导,所以我就不赘述了

要从现有的数组结构转换到上面的数组结构,可以使用以下函数(当然是混乱的):

$newArray = array();
$length = count($nameArray);   //this assumes $nameArray is the same length as $lastnameArray
for($i = 0, $i < $length, $i++){
    array_push($newArray, $nameArray[$i], $lastnameArray[$i])
}
$newArray=array();
$length=计数($nameArray)//这假设$nameArray的长度与$lastnameArray的长度相同
对于($i=0,$i<$length,$i++){
array\u push($newArray、$nameArray[$i]、$lastnameArray[$i])
}

根据您提供的结构判断,您可以用$parentArray[0]和$parentArray[1]替换$nameArray和$lastnameArray。

您的标题是:“将从表单检索的数组保存到数据库的最佳方式是什么”-但您的问题是:“将此数据保存到数据库表的最佳方式是什么?”-那么,是哪种方式;检索还是保存?在任何情况下,听起来都太宽泛了。你的问题是无效的,你没有描述什么方式最适合你的需要。我使用两种方式:1)foreach循环和使用雄辩的模型逐个保存到数据库。2) foreach循环并创建一个新变量,然后通过DB类将其保存到数据库中