首页 文章

PHP / MySQL插入行然后得到'id'

提问于
浏览
185

插入行时,表格的“id”字段会自动增加 . 我想插入一行然后获取该ID .

我会像我说的那样做,但有没有办法我可以做到这一点而不用担心插入行和获取ID之间的时间?

我知道我可以在数据库中查询与输入的信息相匹配的行,但是有很大的变化会有重复,唯一的区别是id .

10 回答

  • 1

    一个例子 .

    $query_new = "INSERT INTO students(courseid, coursename) VALUES ('', ?)";
        $query_new = $databaseConnection->prepare($query_new);
        $query_new->bind_param('s', $_POST['coursename']);
        $query_new->execute();
        $course_id = $query_new->insert_id;
        $query_new->close();
    

    代码行 $course_id = $query_new->insert_id; 将显示最后插入的行的ID . 希望这可以帮助 .

  • 7

    试试这样你就可以得到答案:

    <?php
    $con=mysqli_connect("localhost","root","","new");
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
    
    mysqli_query($con,"INSERT INTO new values('nameuser','2015-09-12')");
    
    // Print auto-generated id
    echo "New record has id: " . mysqli_insert_id($con);
    
    mysqli_close($con);
    ?>
    

    看看以下链接:

    http://www.w3schools.com/php/func_mysqli_insert_id.asp

    http://php.net/manual/en/function.mysql-insert-id.php

    另请注意,此扩展在PHP 5.5中已弃用,在PHP 7.0中已删除

  • 20

    MySQL函数LAST_INSERT_ID()正是您需要的:它检索在此会话期间插入的id . 因此,使用它是安全的,即使有其他进程(例如,其他人调用完全相同的脚本)将值插入到同一个表中 .

    PHP函数mysql_insert_id()与使用 mysql_query() 调用 SELECT LAST_INSERT_ID() 相同 .

  • 242

    另一个可能的答案是:

    定义表时,它将包含列和数据 . 列id可以具有属性 AUTO_INCREMENT .

    通过这种方法,你不必担心 id ,它' ll be made automatically .

    例如(摘自w3schools

    CREATE TABLE Persons
    (
    ID int NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (ID)
    )
    

    希望这对某人有所帮助 .

    Edit: This is only the part where you define how to generate an automatic ID, to obtain it after created, the previous answers before are right.

  • 1

    正如@NaturalBornCamper所说,mysql_insert_id is now deprecated并不应该使用 . 选项现在使用PDO或mysqli . NaturalBornCamper在他的回答中解释了PDO,所以我将使用mysqli_insert_id展示如何使用 MySQLiMySQL Improved) .

    // First, connect to your database with the usual info...
    $db = new mysqli($hostname, $username, $password, $databaseName);
    // Let's assume we have a table called 'people' which has a column
    // called 'people_id' which is the PK and is auto-incremented...
    $db->query("INSERT INTO people (people_name) VALUES ('Mr. X')");
    // We've now entered in a new row, which has automatically been 
    // given a new people_id. We can get it simply with:
    $lastInsertedPeopleId = $db->insert_id;
    // OR
    $lastInsertedPeopleId = mysqli_insert_id($db);
    

    查看PHP文档以获取更多示例:http://php.net/manual/en/mysqli.insert-id.php

  • 1
    $link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
    mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
    $id = mysqli_insert_id($link);
    

    mysqli_insert_id() .

    无论你做什么,不要插入然后再做“ SELECT MAX(id) FROM mytable ” . 就像你说的那样,它没有必要 . mysqli_insert_id() 已经具备此功能 .

  • 39

    至于PHP的网站,mysql_insert_id现已弃用,我们必须使用PDO . 要使用PDO执行此操作,请执行以下操作:

    $db = new PDO('mysql:dbname=database;host=localhost', 'user', 'pass');
    $statement = $db->prepare('INSERT INTO people(name, city) VALUES(:name, :city)');
    $statement->execute( array(':name' => 'Bob', ':city' => 'Montreal') );
    
    echo $db->lastInsertId();
    
  • -1

    我在上面的链接中找到了答案http://php.net/manual/en/function.mysql-insert-id.php

    答案是:

    mysql_query("INSERT INTO tablename (columnname) values ('$value')");        
    echo $Id=mysql_insert_id();
    
  • 0

    我只想添加一个关于 lastInsertId() 的小细节;

    When entering more than one row at the time, it does not return the last Id ,但是最后一次插入的集合的第一个Id .

    请考虑以下示例

    $sql = 'INSERT INTO my_table (varNumb,userid) VALUES
         (1, :userid),
         (2, :userid)';
    $sql->addNewNames = $db->prepare($sql);
    addNewNames->execute(array(':userid' => $userid));
    
    echo $db->lastInsertId();
    

    这里发生的是我推入两个新行 my_table . 表的id是自动递增的 . 在这里,对于同一个用户,我添加了两行不同的 varNumb .

    末尾的回显值将等于 varNumb=1 行的id,这意味着不是最后一行的id,而是最后一个请求中添加的第一行的id .

  • 27

    试试这个......它对我有用!

    $sql = "INSERT INTO tablename (row_name) VALUES('$row_value')";
        if (mysqli_query($conn, $sql)) {
        $last_id = mysqli_insert_id($conn);
        $msg1 = "New record created successfully. Last inserted ID is: " . $last_id;
    } else {
        $msg_error = "Error: " . $sql . "<br>" . mysqli_error($conn);
        }
    

相关问题