2013-04-15 87 views
0

任何人都可以阐明为什么这个PHP/MySQL不工作?基本上,我需要一次从表格中插入行的负载,所以将有多个名称字段,多个短,中,长字段等即时得到这个错误:一次向MySQL中插入多个值

Notice: Undefined variable: Short1 in C:\xampp\htdocs\process.php on line 95 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Long, VLong, Extreme, LJump, HJump, Shotputt, Discuss, Javelin, Date, Year) VAL' at line 2 

这是我的PHP

<?php 


$host = "localhost"; 
$databasename = "pe_results"; 
$databaseusername = "root"; 
$databasepassword = ""; 

$conn = mysql_connect("$host", "$databaseusername", "$databasepassword"); 
mysql_select_db("$databasename", $conn); 

     if (isset($_POST['Name1'])) { 
     $Name1 = $_POST['Name1']; 
     } 
     if (isset($_POST['Short1'])) { 
     $Short1 = $_POST['Short1']; 
     } 
     if (isset($_POST['Med1'])) { 
     $Med1 = $_POST['Med1']; 
     } 
     if (isset($_POST['Long1'])) { 
     $Long1 = $_POST['Long1']; 
     } 
     if (isset($_POST['VLong1'])) { 
     $VLong1 = $_POST['VLong1']; 
     } 
     if (isset($_POST['Extreme1'])) { 
     $Extreme1 = $_POST['Extreme1']; 
     } 
     if (isset($_POST['LJump1'])) { 
     $LJump1 = $_POST['LJump1']; 
     } 
     if (isset($_POST['HJump1'])) { 
     $HJump1 = $_POST['HJump1']; 
     } 
     if (isset($_POST['Shotputt1'])) { 
     $Shotputt1 = $_POST['Shotputt1']; 
     } 
     if (isset($_POST['Discuss1'])) { 
     $Discuss1 = $_POST['Discuss1']; 
     } 
     if (isset($_POST['Javelin1'])) { 
     $Javelin1 = $_POST['Javelin1']; 
     } 
     if (isset($_POST['Date'])) { 
     $Date = $_POST['Date']; 
     } 
     if (isset($_POST['Year'])) { 
     $Year = $_POST['Year']; 
     } 
     // Sector 2 */ 
      if (isset($_POST['Name2'])) { 
     $Name2 = $_POST['Name2']; 
     } 
     if (isset($_POST['Short2'])) { 
     $Short2 = $_POST['Short2']; 
     } 
     if (isset($_POST['Med2'])) { 
     $Med2 = $_POST['Med2']; 
     } 
     if (isset($_POST['Long2'])) { 
     $Long2 = $_POST['Long2']; 
     } 
     if (isset($_POST['VLong2'])) { 
     $VLong2 = $_POST['VLong2']; 
     } 
     if (isset($_POST['Extreme2'])) { 
     $Extreme2 = $_POST['Extreme2']; 
     } 
     if (isset($_POST['LJump2'])) { 
     $LJump2 = $_POST['LJump2']; 
     } 
     if (isset($_POST['HJump2'])) { 
     $HJump2 = $_POST['HJump2']; 
     } 
     if (isset($_POST['Shotputt2'])) { 
     $Shotputt2 = $_POST['Shotputt2']; 
     } 
     if (isset($_POST['Discuss2'])) { 
     $Discuss2 = $_POST['Discuss2']; 
     } 
     if (isset($_POST['Javelin2'])) { 
     $Javelin2 = $_POST['Javelin2']; 
     } 
     if (isset($_POST['Date'])) { 
     $Date = $_POST['Date']; 
     } 
     if (isset($_POST['Year'])) { 
     $Year = $_POST['Year']; 
     } 

     $sql="INSERT INTO results_main 
    (Name, Short, Med, Long, VLong, Extreme, LJump, HJump, Shotputt, Discuss, Javelin, Date, Year) 
VALUES 
    ('$Name1', '$Short1', '$Med1', '$Long1', '$VLong1', '$Extreme1', '$LJump1', '$HJump1', '$Shotputt1', '$Discuss1', '$Javelin1', '$Date', '$Year'), 
    ('$Name2', '$Short2', '$Med2', '$Long2', '$VLong2', '$Extreme2', '$LJump2', '$HJump2', '$Shotputt2', '$Discuss2', '$Javelin2', '$Date', '$Year'); 
"; 

$result = mysql_query($sql) or die(mysql_error()); 

// close connection 
mysql_close($conn); 

?> 

为JW

Notice: Undefined variable: Short1 in C:\xampp\htdocs\process.php on line 95 
INSERT INTO results_main (`Name`, `Short`, `Med`, `Long`, `VLong`, `Extreme`, `LJump`, `HJump`, `Shotputt`, `Discuss`, `Javelin`, `Date`, `Year`) VALUES (`1`, ``, `1`, `1`, `1`, `1`, `1`, `1`, `1`, `1`, `1`, `2013-04-26`, `10`), (`2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2`, `2013-04-26`, `10`); Unknown column '1' in 'field list' 

回答

3

LONG新的错误消息是保留关键字,恰好是你列的名称。为了避免语法错误,列名应该使用反引号进行转义。

INSERT INTO results_main(Name, Short, Med, `Long`, VLong, ...) VALUES (....) 

如果您有权限变更列,将名称更改为一个非保留关键字,以避免问题找回未来。


作为旁注,查询是用SQL Injection脆弱,如果变量的值(小号)从外部来了。请看下面的文章,了解如何防止它。通过使用PreparedStatements你可以摆脱使用单引号围绕值。

+0

谢谢,我用反引号排序了这个问题,但现在我得到这个错误:注意:未定义的变量:Short1在95行的C:\ xampp \ htdocs \ process.php中 '字段列表中的未知列'1' ' –

+0

在调用'mysql_query()'之前,你能发布这个结果吗:'echo $ sql'? –

+0

更新了问题的结果,我已经解决了调用$ Short1的问题,但是我仍然收到未知列1错误 –

0

检查后阵列,你有什么毛病$ _ POST [ 'Short1'];

另外不要使用MYSQL保留关键字,Long是保留关键字。如果你使用你应该逃脱它

`Long` 
+0

短变量是好的,我不知道为什么它踢起来大惊小怪,一切工作正常,唯一不同的是名称。此外,我已经将所有内容都包含在反引号中,因此不必担心保留字 –

0

我建议通过倾销你的$ _POST阵列,看着它。根据你的代码,只有在$ _POST数组中有一个值时才会设置变量。