Я работаю над небольшим проектом для своего учителя английского, и я впервые делаю что-то с базами данных. У меня есть стол Books
с четырьмя столбцами: Id, Title, Link, and Rating
, Идея состоит в том, что пользователь может отправить название книги, которую он недавно прочитал, ссылку на нее на goodreads и рейтинг из 5 звезд. (У меня пока нет подтверждения ввода, но я собираюсь добавить его после того, как закончу с текущей проблемой.)
Проблема происходит в столбце Id. Я пытаюсь, используя PHP и SQL, захватить самый большой Id во всей таблице, а затем установить Id вновь добавленной книги (строки) на единицу больше, чем старый самый большой.
Вот мой HTML:
<form action="bookSubmit.php" method="post">
Book Title: <input type="text" name="title"><br>
Goodreads Link: <input type="text" name="link"><br>
Rating (1 to 5): <input type="number" name="rating" min="1" max="5"><br>
<input type="submit" value="submit">
</form>
и bookSubmit.php:
<?php
$servername = "localhost";
$username = "[My username]";
$password = "[My password]";
$dbname = "PullJosh_books";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}$newId = $conn->query("SELECT MAX(Id) FROM Books"); // Replacing this line with $newId = and then manually typing in the current highest Id works (meaning everything else is all set).
$newId++;
$sql = "INSERT INTO Books (Id, Title, Link, Rating)
VALUES ('". $newId ."', '" . $_POST['title'] . "', '" . $_POST['link'] . "', '" . $_POST['rating'] . "')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
Когда я бегу SELECT MAX(Id) FROM Books
во вкладке phpmyadmin sql я получаю 2, что правильно.
Если вы заметили какие-либо проблемы с безопасностью (помимо проверки правильности ввода), пожалуйста, дайте мне знать об этом.
Вам не нужно сначала найти наибольшее число в таблице, а затем добавить к нему одно число и затем отправить. В вашей таблице данных в MySQL превратить идентификатор в первичный ключ и сделать его автоматическим приращением true, который всегда будет вставлять уникальный и увеличенный идентификатор.
синтаксис для того же
ALTER TABLE tbl_name ADD id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT;
Других решений пока нет …