#mysql #sql
#mysql #sql
Вопрос:
INSERT INTO `test`.`lecturer` (`lecturerID`, `course_ID`, `lecturerFirstName`, `lecturerLastName`, `lectureremail`, `lecturerpassword`) VALUES (NULL, NULL, 'test', 'test', 'a@gmail.com', '123456');
Предоставлен был тестовый код, который я ввел в свой phpmyadmin, lecturerID был первичным ключом, а также имел автоматическое увеличение, насколько я понимаю, я не предполагал ничего вводить там, и sql server введет для меня следующий номер, однако я продолжаю получать # 1062 — дублирующую запись ‘0’ дляключ ‘PRIMARY’. Кто-нибудь, может быть, может дать мне некоторое представление, почему я сталкиваюсь с этим? Спасибо.
Полный код:
<?php include_once "/_core/core.php"; ?>
<?php
if(isset($_POST['id']))
{
$delid = mysql_real_escape_string($_POST['id']);
$sql="DELETE FROM lecturer WHERE lecturerID='$delid'";
mysql_query($sql);
}
if(isset($_POST['fname']) and ($_POST['lname']) and ($_POST['email']) and ($_POST['password']))
{
$fname = mysql_real_escape_string($_POST['fname']);
$lname = mysql_real_escape_string($_POST['lname']);
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
echo $fname, $lname, $email, $password;
$sql = 'INSERT INTO lecturer (lecturerID, course_ID, lecturerFirstName, lecturer_LastName, lectureremail, lecturerpassword) VALUES (NULL,"0","'.$fname.'","'.$lname.'","'.$email.'","'.$password.'")';
mysql_query($sql);
}
?>
<?php
if(!empty($_SESSION['Admin']) amp;amp; !empty($_SESSION['Username']))
{
?>
<?php include "_core/menubar.php"; ?>
<br><br><br>
<form class="form-horizontal" action="add_lecturer.php" method="POST">
<fieldset>
<!-- Form Name -->
<legend>Add lecturer</legend>
<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="fname">First Name</label>
<div class="col-md-4">
<input id="fname" name="fname" type="text" placeholder="First Name" class="form-control input-md" required="">
</div>
</div>
<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="lname">Last Name</label>
<div class="col-md-4">
<input id="lname" name="lname" type="text" placeholder="Last Name" class="form-control input-md" required="">
</div>
</div>
<!-- Text input-->
<div class="form-group">
<label class="col-md-4 control-label" for="email">Email</label>
<div class="col-md-5">
<input id="email" name="email" type="text" placeholder="test@apu.edu.my" class="form-control input-md" required="">
</div>
</div>
<!-- Password-->
<div class="form-group">
<label class="col-md-4 control-label" for="password">Password</label>
<div class="col-md-4">
<input id="password" name="password" type="password" placeholder="*****" class="form-control input-md" required="">
</div>
</div>
<!-- Button -->
<div class="form-group">
<label class="col-md-4 control-label" for="submit"></label>
<div class="col-md-4">
<button id="submit" name="submit" class="btn btn-success">Submit</button>
</div>
</div>
</fieldset>
</form>
<?php
$query = ('SELECT * FROM lecturer');
$q = mysql_query($query);
if(mysql_num_rows($q) > 0)
{
?>
Lecturer List
<table class="table table-striped table-hover">
<form action="add_lecturer.php" method="post">
<?php
while($row = mysql_fetch_array($q)) {
echo "<tr>";
echo "<td>" . $row['lecturerID'] . "</td>";
echo "<td>" . $row['lecturerFirstName'] . "</td>";
echo "<td>" . $row['lecturerLastName'] . "</td>";
echo "<td>" . $row['lectureremail'] . "</td>";
echo '<td><input type="submit" name="deleteItem" value="Delete" /></td>';
echo '<td><input type="hidden" id="id" name="id" value="'.$row['lecturerID'].'" /></td>';
echo "</tr>";
}
?>
</table>
</form>
<?php
}
else
{
echo "You have no lecturers added!";
}
?>
<?php
}
else
{
echo "<meta http-equiv='refresh' content='2;index.php' />";
?>
<?php include "../_class/login.php"; ?>
<?php
}
?>
</div>
<?php include "../_class/footer.php"; ?>
Комментарии:
1. По крайней мере, в MS SQL Server вы вообще не можете указать столбец, попробуйте исключить его из списка вставки и не указывать значение.
2. вместо нулевого прохода » если ваш ключ автоматически увеличивается в sql, он автоматически получит следующее значение
3. Никогда не включайте столбец ‘auto-increment в инструкцию insert. Просто оставьте его вне списка столбцов.
Ответ №1:
Вы должны передать NULL
для столбца автоматического увеличения не Blank
значение, подобное этому
INSERT INTO `test`.`lecturer`
(`lecturerID`, `course_ID`, `lecturerFirstName`, `lecturerLastName`, `lectureremail`, `lecturerpassword`)
VALUES (NULL, NULL, 'test', 'test', 'a@gmail.com', '123456');
Комментарии:
1. Мой плохой, я на самом деле передаю нулевое значение, но я забыл обновить код. Продолжайте получать ту же ошибку. Если бы я сделал это вручную, это сработало бы, а не с php sql tho.
Ответ №2:
Вы должны присвоить NULL
значение этому столбцу автоматического увеличения:
INSERT INTO `test`.`lecturer`
(`lecturerID`, `course_ID`, `lecturerFirstName`, `lecturerLastName`, `lectureremail`, `lecturerpassword`)
VALUES
(NULL, NULL, 'test', 'test', 'a@gmail.com', '123456');
Или вы можете попробовать insert без указания этого столбца в вашем запросе следующим образом:
INSERT INTO `test`.`lecturer`
(`course_ID`, `lecturerFirstName`, `lecturerLastName`, `lectureremail`, `lecturerpassword`)
VALUES
(NULL, 'test', 'test', 'a@gmail.com', '123456');
Ответ №3:
INSERT INTO `test`.`lecturer` (`lecturerID`, `course_ID`, `lecturerFirstName`, `lecturerLastName`, `lectureremail`, `lecturerpassword`)
VALUES ('', '', 'test', 'test', 'a@gmail.com', '123456');
у вас должно быть автоматическое увеличение ключа назначения в базе данных sql