Вот мой код:INSERT INTO, дублирование KEY, где ошибка синтаксиса
INSERT INTO drivers (name, comments, start_time, end_time)
VALUES ('$name', '$comment', '$start', '$end')
ON DUPLICATE KEY UPDATE comments='$comment', start_time='$start', end_time='$end'
WHERE name='$name'
Я тогда получаю эту ошибку:
Error: 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 'WHERE name=''' at line 1
Вот код формы, который подчиняющееся это SQL заявление:
<form *posting to seperate submit page*>
<table>
<tr>
<td>Driver:</td>
<td class=results>
<select name="name">
<option value="">Pick one...</option>
<?php
$results2=mysqli_query($con,"SELECT id, name FROM drivers");
if (!$results2) {
die('Error2: ' . mysqli_error($con));
}
while($row = mysqli_fetch_array($results2)) {
echo "<option value='".$row['id']."'>".$row['name']."</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td>Driver not in dropdown. Type name here:</td>
<td class="results">
<textarea name="name" rows="1" cols="30" placeholder="Driver name"></textarea>
</td>
<tr>
<td>Start time:</td>
<td class="results">
<textarea name="start" rows="1" cols="10" placeholder="Start time"></textarea>
</td>
</tr>
<tr>
<td>End time:</td>
<td class="results">
<textarea name="end" rows="1" cols="10" placeholder="End time"></textarea>
</td>
</tr>
<tr>
<td>Comment:</td>
<td class="results">
<textarea name="comment" rows="3" cols="50" placeholder="Comment - Optional"></textarea>
</td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form>
И для ясности, здесь база данных создать таблицу заявление:
| drivers | CREATE TABLE `drivers` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`comments` varchar(255) DEFAULT NULL,
`start_time` time NOT NULL,
`end_time` time NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 |
Я попытался получить идентификатор для отправки через скрытый ввод в форме, однако, поскольку я выбираю имя из выпадающего списка, он также не будет передавать идентификатор, потому что вы не знаете, какая запись в выпадающем меню это будет до тех пор, пока я не догадался.
EDIT Я попытался без предложения WHERE до и в конечном итоге с этим в базе данных:
+----+-------+----------+------------+----------+
| id | name | comments | start_time | end_time |
+----+-------+----------+------------+----------+
| 1 | Steve | test 7 | 09:14:00 | 22:00:00 |
| 2 | | test 10 | 09:30:00 | 21:00:00 |
+----+-------+----------+------------+----------+
Вторая строка является «обновление» к предыдущей записи, однако он только добавил новый поэтому я получил предложение WHERE.
Я думаю, что вам не нужно использовать предложение where, MySQL знает, какую строку вы хотите отредактировать, это тот, который дублируется –
$ sql = "INSERT INTO драйверы (имя, комментарии, start_time, end_time) VALUES ('. $ name. "', '". $ comment. "', '". $ start. "', '". $ end. "') ON DUPLICATE KEY UPDATE comments = '". $ comment. "' , start_time = '". $ start."', end_time = '". $ end."' "; –
Перейти к статье о SQL-инъекции. – CodeCaster