source

PHP/MySQL 행을 삽입한 후 'id'를 가져옵니다.

lovecheck 2023. 1. 15. 16:59
반응형

PHP/MySQL 행을 삽입한 후 'id'를 가져옵니다.

행을 삽입하면 테이블 자동의 'id' 필드가 증가합니다.행을 삽입하고 그 ID를 취득하고 싶습니다.

말씀드린 대로 하겠습니다만, 행을 삽입하고 ID를 취득할 때까지의 시간을 신경 쓰지 않고 할 수 있는 방법은 없을까요?

입력한 정보와 일치하는 행을 데이터베이스에 조회할 수 있지만, ID만 다를 뿐 중복되는 경우가 많습니다.

$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);

를 참조해 주세요.

어떤 작업을 하든 삽입하지 말고 "SELECT MAX(id) FROM mytable"당신 말처럼 이건 인종문제이고 그럴 필요 없어요. mysqli_insert_id()에는 이미 이 기능이 있습니다.


또 다른 방법은 두 쿼리를 한 번에 실행하여MySQLLAST_INSERT_ID()두 테이블이 한 번에 수정되는 방법(PHP에는 ID가 필요 없음)입니다.

mysqli_query($link, "INSERT INTO my_user_table ...;
  INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");

연결은 ID를 개별적으로 추적하므로 충돌은 이미 방지됩니다.

MySQL 함수는 이 세션에서 삽입된 ID를 가져옵니다.따라서 같은 테이블에 값을 삽입하는 다른 프로세스(예를 들어 동일한 스크립트를 호출하는 다른 사용자)가 있더라도 사용해도 안전합니다.

PHP 함수는 호출과 동일합니다.SELECT LAST_INSERT_ID()와 함께mysql_query().

PHP의 웹사이트는 mysql_insert_id가 폐지되어 PDO 또는 MySQLi하나를 사용해야 합니다(MySQLi에 대한 @Luke의 답변 참조).PDO를 사용하여 이를 수행하려면 다음과 같이 진행하십시오.

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

echo $db->lastInsertId();

@NaturalBornCamper가 말했듯이 mysql_insert_id는 사용되지 않으므로 사용하지 마십시오.이제 PDO 또는 mysqli 옵션을 사용할 수 있습니다.NaturalBornCamper는 답변에서 PDO에 대해 설명했으므로 mysqli_insert_id를 사용하여 MySQLi(MySQL 개량형)를 사용하여 PDO를 수행하는 방법을 보여 줍니다.

// 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 문서를 참조해 주세요.

나는 단지 에 관한 작은 세부사항을 추가하고 싶다.lastInsertId();

한 번에 여러 행을 입력하면 마지막 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.

와 동일합니다.행의 ID는 ID가 됩니다.varNumb=1이는 마지막 행의 ID가 아니라 마지막 요구에 추가된 첫 번째 행의 ID를 의미합니다.

예를 들면.

    $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;아이디이게 도움이 됐으면 좋겠다.

이렇게 시도하면 답을 얻을 수답을 얻을 수 있습니다.

<?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에서 제거되었습니다.

위의 링크 http://php.net/manual/en/function.mysql-insert-id.php에서 답을 찾았습니다.

답은 다음과 같습니다.

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

이거 드셔보세요.효과가 있었어!

$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);
    }

다른 가능한 답변은 다음과 같습니다.

테이블을 정의할 때 테이블에는 열과 데이터가 포함됩니다.열 ID에는 AUTO_INCREMENT 속성을 지정할 수 있습니다.

이 방법으로 아이디를 걱정할 필요 없이 자동으로 생성됩니다.

예를 들어 (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)
)

이것이 누군가에게 도움이 되기를 바랍니다.

편집: 자동 ID를 생성하는 방법을 정의하는 부분일 뿐이며, 작성한 후 자동 ID를 얻으려면 앞의 답변이 옳습니다.

언급URL : https://stackoverflow.com/questions/897356/php-mysql-insert-row-then-get-id

반응형