0

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

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“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()); 
};
 ?>
4

1 回答 1

1

问题是你在mysql_query这里有两个调用,第一个调用有效的查询字符串,第二个调用@mysql_query($result)它的结果——即字符串'1'。但是您实际上不需要该调用,因为第一个查询应该已经将数据发送到 DB。

快速修复将检查$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]);
  }
}

这样,您也可以简化创建查询的代码。

于 2013-05-31T23:43:51.293 回答