PHP阵列插入到MySQL表的个别行。 [英] PHP Array insert into MySQL table as individual rows.
本文介绍了PHP阵列插入到MySQL表的个别行。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想用PHP在MySQL表中插入多发行。数据是在数组中,我试图采用了下述codeS,但它不工作。请帮我。
查询字符串是:
<$p$p><$c$c>new_document.php?doctype=Inv&paytype=u&docno=3&bookno=31&prname=40329&pename=1001&paydate=07%2F22%2F2011&indate=7%2F30%2F2011&accname1=Man+Site&DrAmount1=20&CrAmount1=1&accname2=Man+Site&DrAmount2=0&CrAmount2=5&ref=Jul%2F2011
$行=爆炸(&安培;,$ _ SERVER ['QUERY_STRING']);
$行数=((计数($行)-9)/ 3); //设置计算行收到,9是costant没有投入 $系列号=阵列();
$ acc_name =阵列();
$借记=阵列();
$信贷=阵列(); $系列号[] = $ I;
array_unshift($系列号,);
未设置($系列号[0]); $ acc_name [] =($ _GET ['accname'$ I]);
array_unshift($ acc_name,);
未设置($ acc_name [0]); $借记[] =($ _GET ['DrAmount'$ I]);
array_unshift($借记);
未设置($借记[0]); $信用[] =($ _GET ['CrAmount'$ I]);
array_unshift($信贷,);
未设置($信贷[0]); 回声序列号:.print_r($系列号);
呼应'&LT; BR&gt;一种/ C名称:.print_r($ acc_name);
呼应'&LT; BR&GT;借方金额:'.print_r($借方);
呼应'&LT; BR&GT;信用证金额:'.print_r($功劳); 这给了我以下结果:
ARRAY
(
[1] =&GT; 1
[2] =&GT; 2
)
序列号:1ARRAY
(
[1] =&GT;人遗址
[2] =&GT;人遗址
) A / C名称:1ARRAY
(
[1] =&GT; 20
[2] =&GT; 0
) 借方发生额:1ARRAY
(
[1] =&GT; 1
[2] =&GT;五
) 信用额度:1
为($ i = 1; $ I = $行数; $ I ++)
{
$金额=($借记[$ i] - $信用[$ i]);
$ accname = $ acc_name [$ i]; $ insert2 =INSERT INTO`khata2`.`docitems`
(
`dateinput`,
`docno`,
`itemno`,
`accountname`,
`amount`,
`picrefno`,
`updatestamp`)
VALUES(
现在(''),
'$ docno',
'$ I',
'$ accname',
$量',
'$ docno',
空值);
}
如果(!的mysql_query(insert2 $)){
呼应'&LT; BR&GT;&LT;风格=颜色:红色&GT;零&LT; / A&GT;项目得救了!再试...&LT; BR&GT;'; 死('错误:mysql_error());
打破;
}
呼应'&LT; BR&GT;&LT;风格=颜色:绿色&GT;'。$行数。 &LT; / A&GT;记录插入。
出口();
结果:
致命错误:在F中突破30秒最大执行时间:\\服务器\\ htdocs中\\ XAMPP \\ Khata2 \\线184处理器\\ new_document.php(184线为$量',)
解决方案
1)你做的:
为($ i = 1; $ I&LT; = $行数; $ I ++){
//生成查询
}
//做查询
但yoou需要:
为($ i = 1; $ I&LT; = $行数; $ I ++){
//生成查询
//做查询
}
2)也许有些快将做1比查询查询1的每一行:结果
您可以使用下面的语法:
INSERTY INTO表(字段1,场2)VALUES(V11,V12),(V21,V22),(V31,V32);$ insert2 =阵列();
为($ i = 1; $ I = $行数; $ I ++)
{
$金额=($借记[$ i] - $信用[$ i]);
$ accname = $ acc_name [$ i]; $ insert2 [] =(
`dateinput`,
`docno`,
`itemno`,
`accountname`,
`amount`,
`picrefno`,
`updatestamp`)
VALUES(
现在(''),
'$ docno',
'$ I',
'$ accname',
$量',
'$ docno',
空值);
}
如果(!的mysql_query(INSERT INTO tblname VALUES'.implode('',$ insert2))){
呼应'&LT; BR&GT;&LT;风格=颜色:红色&GT;零&LT; / A&GT;项目得救了!再试...&LT; BR&GT;'; 死('错误:mysql_error());
打破;
}
3)或PDO与mysqli的prepared语句是伟大的;)
I want to insert mutiple rows in mysql table using php. Data is in arrays and I am trying to employ following codes but its not working. Please help me.
Query String is:
new_document.php?doctype=Inv&paytype=u&docno=3&bookno=31&prname=40329&pename=1001&paydate=07%2F22%2F2011&indate=7%2F30%2F2011&accname1=Man+Site&DrAmount1=20&CrAmount1=1&accname2=Man+Site&DrAmount2=0&CrAmount2=5&ref=Jul%2F2011
$rows = explode("&", $_SERVER['QUERY_STRING']);
$rowcount =((count($rows)-9)/3); // Count set of rows received , 9 is the costant no of inputs
$serialno = array();
$acc_name = array();
$debit = array();
$credit = array();
$serialno [] = $i;
array_unshift($serialno,"");
unset($serialno[0]);
$acc_name[] = ($_GET['accname'.$i]);
array_unshift($acc_name,"");
unset($acc_name[0]);
$debit[] = ($_GET['DrAmount'.$i]);
array_unshift($debit,"");
unset($debit[0]);
$credit[] = ($_GET['CrAmount'.$i]);
array_unshift($credit,"");
unset($credit[0]);
echo 'Serial Numbers : '.print_r($serialno);
echo '<br>A/C Names : '.print_r($acc_name);
echo '<br>Debit Amount : '.print_r($debit);
echo '<br>Credit Amount : '.print_r($credit);
This gives me following result :
ARRAY
(
[1] => 1
[2] => 2
)
SERIAL NUMBERS : 1ARRAY
(
[1] => MAN SITE
[2] => MAN SITE
)
A/C NAMES : 1ARRAY
(
[1] => 20
[2] => 0
)
DEBIT AMOUNT : 1ARRAY
(
[1] => 1
[2] => 5
)
CREDIT AMOUNT : 1
for ($i=1;$i=$rowcount;$i++)
{
$amount = ($debit[$i]-$credit[$i]);
$accname=$acc_name[$i];
$insert2 = "INSERT INTO `khata2`.`docitems`
(
`dateinput`,
`docno`,
`itemno`,
`accountname`,
`amount`,
`picrefno`,
`updatestamp`)
VALUES (
NOW(''),
'$docno',
'$i',
'$accname',
'$amount',
'$docno',
Null)";
}
if (!mysql_query($insert2)){
echo '<br><a style="color:RED">Zero</a> items saved! Try Again..<br>';
die('Error: ' . mysql_error());
break;
}
echo '<br><a style="color:GREEN">'.$rowcount.' </a>record inserted.';
exit();
RESULTS AS :
Fatal error: Maximum execution time of 30 seconds exceeded in F:\server\htdocs\xampp\Khata2\processor\new_document.php on line 184 ( Line 184 is '$amount',)
解决方案
1) You do:
for ($i=1;$i<=$rowcount;$i++){
//generate query
}
//do query
but yoou need:
for ($i=1;$i<=$rowcount;$i++){
//generate query
//do query
}
2) Maybe some faster will be to do 1 query than 1 query for every row:
You can use following syntax:
INSERTY INTO table(field1,field2) VALUES(v11,v12),(v21,v22),(v31,v32);
$insert2=array();
for ($i=1;$i=$rowcount;$i++)
{
$amount = ($debit[$i]-$credit[$i]);
$accname=$acc_name[$i];
$insert2[] = "(
`dateinput`,
`docno`,
`itemno`,
`accountname`,
`amount`,
`picrefno`,
`updatestamp`)
VALUES (
NOW(''),
'$docno',
'$i',
'$accname',
'$amount',
'$docno',
Null)";
}
if (!mysql_query('INSERT INTO tblname VALUES'.implode(',',$insert2))){
echo '<br><a style="color:RED">Zero</a> items saved! Try Again..<br>';
die('Error: ' . mysql_error());
break;
}
3) PDO or mysqli with prepared statements is great;)
这篇关于PHP阵列插入到MySQL表的个别行。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文