2013-05-31 86 views
0

我有以下代码在提交时试图追上多达15个条目,但它仅捕获数据库中的第一个条目,并且收到以下错误消息:PHP Array只写第一条记录到MySQL数据库

你的SQL语法有错误;检查对应于你的MySQL服务器版本在第1行

<?php 

for($i = 0; $i < 15; $i++) 
{ 
$tournament = $_POST['tournament']; 
$agegroup = $_POST['agegroup']; 
$teamname = $_POST['teamname']; 
$coach = $_POST['coach']; 
$coachaau = $_POST['coachaau']; 
$phone = $_POST['phone']; 
$email = $_POST['email']; 
$astcoach = $_POST['astcoach']; 
$astno = $_POST['astno']; 
$astphone = $_POST['astphone']; 
$astemail = $_POST['astemail']; 
$manager = $_POST['manager']; 
$managerno = $_POST['managerno']; 
$managerphone = $_POST['managerphone']; 
$manageremail = $_POST['manageremail']; 
$name = $_POST['name'][$i]; 
$grade = $_POST['grade'][$i]; 
$bday = $_POST['bday'][$i]; 
$aauno = $_POST['aauno'][$i]; 

if(empty($name) || empty($grade) || empty ($bday) || empty ($aauno)) 
{ 
echo ' '; 
} 
elseif(

$result = mysql_query("INSERT INTO roster (tournament, agegroup, teamname, coach, coachaau, phone, email, astcoach, astno, astphone, astemail, manager, managerno, managerphone, manageremail, name, grade, bday, aauno) 
    VALUES ( 
'". mysql_real_escape_string($tournament) . "', 
'". mysql_real_escape_string($agegroup) . "', 
'". mysql_real_escape_string($teamname) . "', 
'". mysql_real_escape_string($coach) . "', 
'". mysql_real_escape_string($coachaau) . "', 
'". mysql_real_escape_string($phone) . "', 
'". mysql_real_escape_string($email) . "', 
'". mysql_real_escape_string($astcoach) . "', 
'". mysql_real_escape_string($astno) . "', 
'". mysql_real_escape_string($astphone) . "', 
'". mysql_real_escape_string($astemail) . "', 
'". mysql_real_escape_string($manager) . "', 
'". mysql_real_escape_string($managerno) . "', 
'". mysql_real_escape_string($managerphone) . "', 
'". mysql_real_escape_string($manageremail) . "', 
'". mysql_real_escape_string($name) . "', 
'". mysql_real_escape_string($grade) . "', 
'". mysql_real_escape_string($bday) . "', 
'". mysql_real_escape_string($aauno) . "');")); 
@mysql_query($result)or die(mysql_error()); 
}; 
?> 
+0

您的for循环完全没用,因为数据总是相同的。例如。 $ _POST ['锦标赛']是同等价值的15倍。 – djot

+0

请停止使用'@'来抑制错误。 – Kermit

回答

1

的问题用接近“1”正确的语法手册是,你有两个mysql_query通话这里,虽然第一个在工作有效的查询字符串,第二个 - @mysql_query($result)处理其结果 - 即字符串'1'。但你实际上不需要这样的调用,因为第一个查询应该已经将数据发送到数据库。

速战速决将检查$result本身(而不是@mysql_query($result)or die(mysql_error());线):

if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

说了这么多,我想提醒你的是mysql_query(作为整个家庭的mysql_功能)已被弃用。如果您使用PDO或MySQLi,则可以使用单个准备好的语句,并在每次迭代时填入新数据。

此外(对@djot的提及)在循环之前一次又一次从$ _POST中提取非数组变量并不是一种有效的方法,而是仅仅执行一次。这样(如果你留在mysql),你也不必每次都逃脱它们。其实,我会在这里使用类似的东西:

$fieldsToInsert = array('tournament', 'agegroup', 'teamname', ...); 
$valuesToInsert = []; 
foreach ($fieldsToInsert as $field) { 
    if (! isset($_POST[$field])) { 
    // actually it's not clear what to do here: 
    // should we signal an error immediately with, or use some fallback value 
    } 
    else { 
    $valuesToInsert[$field] = mysql_real_escape_string($_POST[$field]); 
    } 
} 

这样你就可以简化创建查询的代码。

+0

啊哈,谢谢。我刚刚删除了第二个mysql查询命令。 – user2233333

相关问题