Ошибка SQL даже при автоматическом увеличении

#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