1

最初にコードを紹介します。この方法で説明する方が簡単です。

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

今のところ、消毒について心配する必要はありません。

私はラインに着きました:

mysql_query("UPDATE `cadets` SET `uniformID` = '" .  ."' WHERE id = '$cadet'");

SQL挿入のIDが必要であることに気づきました

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

データベースから新しくインクリメントされたIDを取得する効率的な方法はありますか?次のようなテーブル構造:

cadet(id[primary key, auto increment],...,uniformID)

uniform(id[prim key, auto inc], note, cadetID)

データ:

Cadet: 1,...,[1,2,3]<-[]内のすべてはcadetIDにあり、配列は'、'で区切られます

Uniform: 1, need a new blahh blahh, 1

Uniform: 2, new shoes needed, 1

などなど。

したがって、ERの話では、1人の士官候補生が多くの統一IDを持つことができます。

TL; DR新しいIDをデータベース(SQLデータベースによって自動インクリメント)に保存する必要がありますinsert into

4

3 に答える 3

2

これをPDOに変更し、次のように簡単にアクセスすることをお勧めします。

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

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

$last_id = $db->lastInsertId();

ここに素晴らしいチュートリアルとその方法があります:http ://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

しかし、あなたの場合、次のようなクエリを使用できます(安全ではありませんが):

SELECT LAST_INSERT_ID();
于 2012-11-08T11:45:16.347 に答える
2

MySQLは、セッション/接続ごとに最後のauto_increment値を格納します。この値は、クライアント(つまり、phpスクリプト)側でフェッチすることも、サーバー(つまり、MySQL)側でLAST_INSERT_ID()関数を介して使用することもできます。

見る

自己完結型の例(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));
    }
}

プリント

1, uniform1
2, 
3, uniform2
4, uniform3
5, 
6, 
于 2012-11-08T11:46:00.677 に答える
1

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
于 2012-11-08T11:50:16.107 に答える