如何从新增量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吗?