Php 如何将数组发布到MySQL
我们如何将以下数组发布到mysql(列:id、日期、金额) 我们如何使用foreach从这个数组中获取数据(日期和金额)并发布到MySQL中 我们正在使用以下字段获取此数组Php 如何将数组发布到MySQL,php,mysql,Php,Mysql,我们如何将以下数组发布到mysql(列:id、日期、金额) 我们如何使用foreach从这个数组中获取数据(日期和金额)并发布到MySQL中 我们正在使用以下字段获取此数组 <input type="text" name="payment[date][]" /> <input type="text" name="payment[amount][]" /> <input type="text" name="payment[date][]" /> <inpu
<input type="text" name="payment[date][]" /> <input type="text" name="payment[amount][]" />
<input type="text" name="payment[date][]" /> <input type="text" name="payment[amount][]" />
感谢您的支持。循环第一个子阵列,并保留
$i
索引以访问第二个子阵列:
$stmt = $pdo->prepare("INSERT INTO things (date,amount) VALUES (?,?)");
foreach ($array["date"] as $i=>$_ignore)
{
$stmt->execute( array($array["date"][$i], $array["amount"][$i]) );
}
循环第一个子阵列,并保持
$i
索引以访问第二个子阵列:
$stmt = $pdo->prepare("INSERT INTO things (date,amount) VALUES (?,?)");
foreach ($array["date"] as $i=>$_ignore)
{
$stmt->execute( array($array["date"][$i], $array["amount"][$i]) );
}
编辑:哦,2D数组,不能用它
编辑:哦,2D数组,不能使用它。试试这个:
<?php
$arr = $_POST['payment'];
$insert = array();
foreach($arr['date'] as $key => $date){
$date = mysql_real_escape_string($date);
$amount = (int)$arr['amount'][$key];
$insert[] = "('$date', $amount)";
}
mysql_query("INSERT INTO table(date, amount) VALUES "
. implode(",", $insert));
试试这个:
<?php
$arr = $_POST['payment'];
$insert = array();
foreach($arr['date'] as $key => $date){
$date = mysql_real_escape_string($date);
$amount = (int)$arr['amount'][$key];
$insert[] = "('$date', $amount)";
}
mysql_query("INSERT INTO table(date, amount) VALUES "
. implode(",", $insert));
这是一个mysqli版本(未经测试,我从未使用过mysqli,但我相信它应该可以工作)
这是一个mysqli版本(未经测试,我从未使用过mysqli,但我相信它应该可以工作)
你有一个2D数组,所以我假设你必须有一个double foreach循环。你已经掌握了多少知识?您是否已经在使用特定的MySQL扩展(MySQL.*
,mysqli.*
或PDO
)了?或者这是一个完整的PHP/MySQL新手问题?@fireeyedboy是的,我可以使用mysqli,但我希望在将其发布到db之前在PHP中进行循环。@JCOC611:这没有必要。循环一个元素,同时检查另一个元素中是否存在相同的索引将很好。@fireeyedboy您可以发布代码吗?您有一个2D数组,所以我假设您必须有一个双foreach循环。您已经具备了什么知识水平?您是否已经在使用特定的MySQL扩展(MySQL.*
,mysqli.*
或PDO
)了?或者这是一个完整的PHP/MySQL新手问题?@fireeyedboy是的,我可以使用mysqli,但我希望在将其发布到db之前在PHP中进行循环。@JCOC611:这没有必要。循环一个元素,同时检查另一个元素中是否存在相同的索引将很好。@fireyedboy您可以发布代码吗?为什么要使用内爆?在我的示例中,我们只想插入一个带有已发布数据的新行,因此每次mysql_查询执行都会插入多个(全部)值。如果count(array)=5,它将创建多少行,与$_POST['payment']['date']中的元素一样多。谢谢!你能帮我解决这个问题吗。。。stackoverflow.com/questions/5436726/adding-prefix-to-mysql-data,因为我在那里找不到正确的答案。为什么要使用内爆?在我的示例中,我们只想插入一个带有已发布数据的新行,因此每次mysql_查询执行都会插入多个(全部)值。如果count(array)=5,它将创建多少行,与$_POST['payment']['date']中的元素一样多。谢谢!你能帮我解决这个问题吗。。。stackoverflow.com/questions/5436726/adding-prefix-to-mysql-data,因为我在那里找不到正确的答案。如果数组中有5个计数,那么它会向mysql发送5行吗?是的,它会循环所有数组索引。@seoppc:你特别得到了mysql/mysqli的三个其他答案。也来看看。如果您想对提供的示例代码(在其他答案中)表示感谢,请使用向上投票箭头。@mario如果fireeyedboy发布的mysqli代码好用,您可以看一看它。@mario,我非常喜欢您的代码快速且小,如果您能用mysqli更新pdo,那将非常有帮助。谢谢,如果数组中的计数为5,那么它会向mysql发送5行吗?是的,它会在所有数组索引上循环。@seoppc:您还得到了mysql/mysqli的另外三个答案。也来看看。如果您想对提供的示例代码(在其他答案中)表示感谢,请使用向上投票箭头。@mario如果fireeyedboy发布的mysqli代码好用,您可以看一看它。@mario,我非常喜欢您的代码快速且小,如果您能用mysqli更新pdo,那将非常有帮助。谢谢,若数组计数等于5,它会在表中创建5行吗?我只是想更清楚地了解代码。thanks@seoppc:此代码将自动插入与示例数组大小相同的行。foreach
循环遍历所有$yourArray['date']
元素(并提取相应的$yourArray['amount']
元素),并在每次迭代中执行查询。如果数组计数等于5,它会在表中创建5行吗?我只是想更清楚地了解代码。thanks@seoppc:此代码将自动插入与示例数组大小相同的行。foreach
循环遍历所有$yourray['date']
元素(并提取相应的$yourray['amount']
元素),并在每次迭代时执行查询。
// the sql statement for the insert
$sql = 'INSERT INTO yourTable ( `id`, `date`, `amount` ) VALUES( null, ?, ? )';
// prepare the query for binding to the placeholders later on
$stmt = $mysqli->prepare( $sql );
// bind some variables to the placeholders
$stmt->bind_param( 'si', $date, $amount );
// loop through all date values
foreach( $yourArray[ 'date' ] as $key => $value ) )
{
// check if there is an equivalent index in $yourArray[ 'amount' ]
// change to isset if you want to guard againt null values
if( !array_key_exists( $key, $yourArray[ 'amount' ] ) )
{
// throw an exception of perhaps use some other form of error
throw new Exception( 'missing parameter' );
}
// give the previously bound variables values for this query execution
$date = $yourArray[ 'date' ][ $key ];
$amount = $yourArray[ 'amount' ][ $key ];
// execute it!
$stmt->execute();
}