2013-04-15 2 views
0

может ли кто-нибудь пролить свет на то, почему этот PHP/MySQL не работает? В принципе мне нужно вставить грузы строк сразу из формы, так что будет несколько полей имен, несколько коротких, мед, длинные поля и т.д .. Im получаю эту ошибку:Вставка нескольких значений в 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, если значение (s) переменными пришло извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

+0

Спасибо, я отсортировал эту проблему с обратными записями, но теперь я получаю эту ошибку: Примечание: неопределенная переменная: Short1 in C: \ xampp \ htdocs \ process.php в строке 95 Неизвестный столбец '1' in ' ' –

+0

перед вызовом 'mysql_query()', можете ли вы опубликовать результат этого: 'echo $ sql'? –

+0

обновленный вопрос с результатами, я исправил проблему с вызовом $ Short1, однако я все еще получаю сообщение об ошибке Unknown Column 1 –

0

Проверьте свой почтовый массив, у вас есть что-то с $ _POST [ 'Short1'];

Также не используйте зарезервированные ключевые слова MYSQL, Long - зарезервированное ключевое слово. Если вы используете, вам следует сбежать от него

`Long` 
+0

Короткая переменная в порядке, я не знаю, почему она поднимает суету, все остальное работает отлично, и единственное, что отличается, это имя. Также я завернул все в backticks со времени публикации, так что не нужно беспокоиться о зарезервированных словах –

0

Предлагаю, сбросив массив $ _POST и посмотрев на него. В соответствии с вашими кодами переменные устанавливаются только в том случае, если в массиве $ _POST есть значение.