如何从新增量id PHP的sql中获取值

如何从新增量id PHP的sql中获取值,php,mysql,sql,Php,Mysql,Sql,我将首先向您展示代码,这样更容易讨论 $message = $_GET['r']; $message = str_replace("%20", " ", $message); echo $message; mysql_query("INSERT INTO `uniform` (`note`,`cadetID) VALUES ('$message','$cadet')"); $query = mysql_query("SELECT `uniformI

我将首先向您展示代码,这样更容易讨论

 $message = $_GET['r'];
    $message = str_replace("%20", " ", $message);
    echo $message;

    mysql_query("INSERT INTO `uniform` (`note`,`cadetID) 
    VALUES ('$message','$cadet')");

    $query = mysql_query("SELECT `uniformID` FROM `cadets` WHERE id = '$cadet'");
    while ($row = mysql_fetch_array($query)) {
      $uniformA = $row['uniformID'];
    }

    if($uniformA == "0"){
      mysql_query("UPDATE `cadets` SET `uniformID` = '" .  ."'
      WHERE id = '$cadet'");
    }
暂时不要担心Sanatization

我说:

mysql_query("UPDATE `cadets` SET `uniformID` = '" .  ."' WHERE id = '$cadet'");
并意识到我需要sql插入的ID

mysql_query("INSERT INTO `uniform` (`note`,`cadetID) VALUES ('$message','$cadet')");
有没有一种有效的方法可以从数据库中获取新增加的ID?表结构如下:

cadetid[主键,自动递增],…,均匀

统一[prim key,auto inc],注释,cadetID

数据:


学员:1,…[1,2,3]我建议您将其更改为PDO,并按如下方式访问:

$query = "INSERT INTO `uniform` ( `note`, `cadetID` ) VALUES ( ?, ? )";
$params = array( $message, $cadet );

$stmt = $db->prepare( $query );
$stmt->execute( $params );

$last_id = $db->lastInsertId();
下面是一个很好的教程,以及如何做到这一点:

但在您的情况下,您可以使用这样的查询,尽管它不那么安全:

SELECT LAST_INSERT_ID();

我建议您将其更改为PDO,并通过以下方式访问它:

$query = "INSERT INTO `uniform` ( `note`, `cadetID` ) VALUES ( ?, ? )";
$params = array( $message, $cadet );

$stmt = $db->prepare( $query );
$stmt->execute( $params );

$last_id = $db->lastInsertId();
下面是一个很好的教程,以及如何做到这一点:

但在您的情况下,您可以使用这样的查询,尽管它不那么安全:

SELECT LAST_INSERT_ID();

MySQL存储每个会话/连接的最后一个自动增量值。您可以在客户端(即php脚本端)获取该值,也可以通过LAST_INSERT_ID函数在服务器(即MySQL端)上使用该值

使用PDO的自包含示例-您无论如何都想研究它;-

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$stmtUniform = $pdo->prepare('INSERT INTO so_uniforms (labelid) VALUES (?)');
$stmtAssignToCadet = $pdo->prepare('
  UPDATE
    so_cadets
  SET
    uniform_id=LAST_INSERT_ID()
  WHERE
    id=?
');

// add uniform and assign to cadet #1
$stmtUniform->execute( array('uniform1') );
$stmtAssignToCadet->execute( array(1) );

// add uniform and assign to cadet #3
$stmtUniform->execute( array('uniform2') );
$stmtAssignToCadet->execute( array(3) );

// add uniform and assign to cadet #4
$stmtUniform->execute( array('uniform3') );
$stmtAssignToCadet->execute( array(4) );

// show cadets<->uniforms
$query = '
    SELECT
        c.id, u.labelid
    FROM
        so_cadets as c
    LEFT JOIN
        so_uniforms as u
    ON
        c.uniform_id = u.id
';

foreach( $pdo->query($query, PDO::FETCH_ASSOC) as $row ) {
    echo join(', ', $row), "\n";
}

// boilerplate
function setup($pdo) {
    $pdo->exec('
        CREATE TEMPORARY TABLE so_cadets (
            id int auto_increment,
            name varchar(32),
            uniform_id int default 0,
            primary key(id)
        )
    ');

    $pdo->exec('
        CREATE TEMPORARY TABLE so_uniforms (
            id int auto_increment,
            labelid varchar(32),
            primary key(id),
            unique key(labelid)
        )
    ');

    $stmt = $pdo->prepare('INSERT INTO so_cadets (name) VALUES (?)');
    foreach( range('A','F') as $c ) {
        $stmt->execute( array('cadet'.$c));
    }
}

MySQL存储每个会话/连接的最后一个自动增量值。您可以在客户端(即php脚本端)获取该值,也可以通过LAST_INSERT_ID函数在服务器(即MySQL端)上使用该值

使用PDO的自包含示例-您无论如何都想研究它;-

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);

$stmtUniform = $pdo->prepare('INSERT INTO so_uniforms (labelid) VALUES (?)');
$stmtAssignToCadet = $pdo->prepare('
  UPDATE
    so_cadets
  SET
    uniform_id=LAST_INSERT_ID()
  WHERE
    id=?
');

// add uniform and assign to cadet #1
$stmtUniform->execute( array('uniform1') );
$stmtAssignToCadet->execute( array(1) );

// add uniform and assign to cadet #3
$stmtUniform->execute( array('uniform2') );
$stmtAssignToCadet->execute( array(3) );

// add uniform and assign to cadet #4
$stmtUniform->execute( array('uniform3') );
$stmtAssignToCadet->execute( array(4) );

// show cadets<->uniforms
$query = '
    SELECT
        c.id, u.labelid
    FROM
        so_cadets as c
    LEFT JOIN
        so_uniforms as u
    ON
        c.uniform_id = u.id
';

foreach( $pdo->query($query, PDO::FETCH_ASSOC) as $row ) {
    echo join(', ', $row), "\n";
}

// boilerplate
function setup($pdo) {
    $pdo->exec('
        CREATE TEMPORARY TABLE so_cadets (
            id int auto_increment,
            name varchar(32),
            uniform_id int default 0,
            primary key(id)
        )
    ');

    $pdo->exec('
        CREATE TEMPORARY TABLE so_uniforms (
            id int auto_increment,
            labelid varchar(32),
            primary key(id),
            unique key(labelid)
        )
    ');

    $stmt = $pdo->prepare('INSERT INTO so_cadets (name) VALUES (?)');
    foreach( range('A','F') as $c ) {
        $stmt->execute( array('cadet'.$c));
    }
}
您还可以使用mysqli函数

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "INSERT INTO `uniform` (`note`,`cadetID) VALUES ('$message','$cadet')";
$mysqli->query($query);

echo $mysqli->insert_id; //echoes the newly incremented id
您还可以使用mysqli函数

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "INSERT INTO `uniform` (`note`,`cadetID) VALUES ('$message','$cadet')";
$mysqli->query($query);

echo $mysqli->insert_id; //echoes the newly incremented id

等等,你不是在逃避GET的消息!公平地说,他说这是他最不关心的事……如果我部署了这个,我会妥善地逃避一切;但我这样做是为了学习,让我的问题简洁明了,我完全意识到逃避;别担心:你是说上次插入id吗?在PHP中,这可以通过使用函数来实现。last insert id yep!这只是PDO吗?等等,你不能逃避GET的消息!公平地说,他说这是他最不关心的事……如果我部署了这个,我会妥善地逃避一切;但我这样做是为了学习,让我的问题简洁明了,我完全意识到逃避;别担心:你是说上次插入id吗?在PHP中,这可以通过使用函数来实现。last insert id yep!这只是PDO吗?