2013-12-02 4 views
0

У меня есть заполненные поля ввода с данными из таблицы mysql с именем person. Я могу хранить данные в таблице или обновлять данные в таблице. Теперь я пытаюсь выполнить как в одном запросе; INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;. Значения разделяют внешний ключ с именем academy_id, поэтому для обновления каждого значения я также должен указать уникальный идентификатор автоматического увеличения, который называется person_id. Когда я выполняю запрос, я получаю ошибку You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use. Как я могу исправить это и уметь вставлять новые значения или обновлять текущие значения? EXAMPLEINSERT или дубликат KEY UPDATE

ВЫБРАТЬ запрос для отображения значений из таблицы

//SELECT Query to display values 
$id = 15; 
$db_select3 = $db_con->prepare(" 
SELECT  a.name, 
      a.academy_id, 
      p.person_id, 
      p.first_name, 
      p.last_name 
    FROM academy a 
    LEFT JOIN person p ON a.academy_id = p.academy_id 
    WHERE a.academy_id = :id 
"); 
if (!$db_select3) return false; 
if (!$db_select3->execute(array(':id' => $id))) return false; 
    $results3 = $db_select3->fetchAll(\PDO::FETCH_ASSOC); 
    if (empty($results3)) return false; 
    $result3 = ''; 
echo "<strong>Personel Information:</strong>"; 
$s = 1; 
foreach ($results3 as $value3){ 
    echo "<ul id=\"pq_entry_".$s."\" class=\"clonedSection\">"; 
    echo "Primary AI Key ID <b>person_id</b>: " . $value3['person_id'] . "</br>"; 
    echo "Foreign Key ID <b>academy_id</b>: " . $value3['academy_id'] . "</br>"; 
    echo "<li><input type=\"hidden\" name=\"person_id_".$s."\" value='". $person_id = $value3['person_id']."'/></li>"; 
    echo "<li><input id=\"person_fname_".$s."\" name=\"person_fname_".$s."\" placeholder=\"Person #1 - First Name\" type=\"text\" value='" . $value3['first_name'] ."'/><input type=\"hidden\" name=\"person_id_".$s."\" value='". $person_id = $value2['person_id']."'/></li>"; 
    echo "<li><input id=\"person_lname_".$s."\" name=\"person_lname_".$s."\" placeholder=\"Last Name\" type=\"text\" value='" . $value3['last_name'] ."'/></li>"; 
    echo "</ul>"; 
$s++; 
} 
echo "<input type='button' id='btnAdd' value='add another Person' /> 
<input type='button' id='btnDel' value='Delete' /></br>"; 

INSERT/UPDATE Запрос

if(isset($_POST['submit'])) { 
     //Insert or Update Values 
     $f = 1; 
     while(isset($_POST['person_fname_' . $f])) 
     { 

      $person_fname = $_POST['person_fname_' . $f]; 
      $person_lname = $_POST['person_lname_' . $f]; 

      $query_init3 = "INSERT INTO person (academy_id, first_name, last_name) VALUES (:id,:person_fname,:person_lname) 
      ON DUPLICATE KEY UPDATE person SET academy_id=:id, first_name=:person_fname, last_name=:person_lname WHERE academy_id=:id AND person_id=:person_id;"; 
      $query_prep3 = $db_con->prepare($query_init3); 
      $query_prep3->execute(array(
       "id" => $id, 
       "person_id" => $person_id, 
       "person_fname" => $person_fname, 
       "person_lname" => $person_lname 
      )); 

      $f++; 
     } 
} 

Таблица значений:

+-----------+------------+-------------+-----------+ 
| person_id | academy_id | first_name | last_name | 
+-----------+------------+-------------+-----------+ 
|  1 |   15 | James  | Barkley | 
|  2 |   15 | Cynthia  | Smith  | 
|  3 |   8 | Peter  | Black  | 
+-----------+------------+-------------+-----------+ 
+0

Одна ошибка в том, что есть дубликат 'UPDATE' в вашем коде. (Рядом с '$ query_init3 ='.) –

+0

Сколько уникальных ограничений у вас есть на столе? Просто 'academy_id'? –

+0

@Jack Единственное единственное ограничение - 'people_id' добавлен модератор таблиц, поэтому он имеет смысл –

ответ

3

Вам не нужно, чтобы указать условие WHERE потому что вы уже использовали предложение в UPDATE.

Try:

$query_init3 = "INSERT INTO person (academy_id, first_name, last_name) VALUES (:id,:person_fname,:person_lname) 
     ON DUPLICATE KEY UPDATE academy_id=:id, first_name=:person_fname, last_name=:person_lname"; 
+0

Хорошо, это сработало, мне кажется лучше, что я должен удалить значения, а затем снова вставить. У меня есть '$ query_init3 =" DELETE FROM person WHERE academy_id =: id INSERT INTO person (academy_id, first_name, last_name) VALUES (: id,: person_fname,: person_lname); ";", но также показывает синтаксическую ошибку. Как я могу это исправить? Вы можете проверить пример [LINK] (http://webprolearner.ueuo.com/test/select_test.php) –

+0

Хорошо запустить запрос по запросу, здесь вы пытаетесь запустить два запроса в одной съемке. Также вы пропустили столбец до INSERT INTO. – zeflex

Смежные вопросы