Php 返回插入行的id(自动增量) 我将数据插入名为“花名册”的表中。第一列(id_花名册)是使用mysql自动递增的id 我运行SELECT查找id\u花名册
我使用此id\u花名册将其与其他数据一起插入到“花名册”表中Php 返回插入行的id(自动增量) 我将数据插入名为“花名册”的表中。第一列(id_花名册)是使用mysql自动递增的id 我运行SELECT查找id\u花名册,php,mysql,Php,Mysql,我使用此id\u花名册将其与其他数据一起插入到“花名册”表中 if ($insert_stmt = $mysqli->prepare("INSERT INTO `roster`(`nom_roster`, `description_roster`, `id_organisation`, `created_by`, `creation_date`,`modified_by`) VALUES (?, ?, ?, ?, ?, ?)")) { $insert_stmt->bind_
if ($insert_stmt = $mysqli->prepare("INSERT INTO `roster`(`nom_roster`, `description_roster`, `id_organisation`, `created_by`, `creation_date`,`modified_by`) VALUES (?, ?, ?, ?, ?, ?)")) {
$insert_stmt->bind_param('ssiisi', $roster_name, $description_roster, $organisation_id, $user_id, $creation_date, $user_id);
if (!$insert_stmt->execute()) {
$reponse = 'Sorry, a database error occurred; please try later';
} else {
// if INSERT OK -> create a new line in roster_membre table
//1. get the roster_id
$sql = "SELECT r.id_roster
FROM roster r
WHERE r.nom_roster = ?
LIMIT 1";
$stmt = $mysqli->prepare($sql);
if ($stmt) {
$stmt->bind_param('s', $roster_name);
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
$stmt->bind_result($id_roster);
$stmt->fetch();
$level = 1;
//2. create a line with the roster_id and insert the membre as level 1
$insert_stmt = $mysqli->prepare("INSERT INTO `roster_par_membre`(`id_membre`, `id_roster`, `level`, `modified_by`) VALUES (?,?,?,?)");
$insert_stmt->bind_param('iiii', $user_id, $id_roster, $level, $user_id);
$insert_stmt->execute();
$reponse = 'success';
}
到目前为止,代码仍在运行,但不是很好。
当我们在一个表中创建一个新行时,有没有一种方法可以直接返回一个用于sql查询(将数据插入第二个表)的值(带有自动递增的id)?或者在一个语句中合并两个查询(两个插入)
简短编辑:这是一个AJAX$响应,返回值(JSON)好的,解决方案:
//1. get the roster_id
$sql = "SELECT r.id_roster
FROM roster r
WHERE r.nom_roster = ?
LIMIT 1";
$stmt = $mysqli->prepare($sql);
if ($stmt) {
$stmt->bind_param('s', $roster_name);
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
$stmt->bind_result($id_roster);
$stmt->fetch();
只需将所有这部分更换为
$id_roster = $mysqli->insert_id;
又好又容易。感谢albanx这些是我用于查询我不想使用任何框架(仅php)的项目的函数:
寻找最后一个插入id?只使用mysqli->query(insert),mysqli->insert\u id怎么样?@vp\u arth是的,这就是最后一个插入id;我查一下。关于如何相应地修改代码,你有什么想法吗?@Raphael_b,我有个好主意-你应该在代码编辑器中打开它并修改代码。@albanx:谢谢你的提示。我目前正在考虑这个选择。这似乎就是我要找的。只需要找到如何让它工作。干杯没关系。我刚刚发布了一些示例,这些示例是我用来更快地编写查询的短手函数。我在这里做了一些手动转义,但是,这可以调整为与mysqli->prepareSo一起使用。你为每个查询打开一个连接,然后将原始php值注入一个准备好的语句中,然后通过将值注入
?
…@DarkBee来滥用系统。实际上,这不是完整的类,正如我所说的,这只是一个可以调整的示例。逃逸和使用有什么问题?和注入原始php值?@DarkBee,你认为(通过你而不是你的方式)打开关闭连接有什么区别吗?如果你用1000个用户运行1000个查询,它确实有区别是的,你应该使用准备好的语句,而不是自己注入值
/**
*
* Executes query methods
* @param string $query the query string
* @param array $vals array of values
* @param bool $show show the query
* @return int/array/false
*/
function q($query, $vals=array(), $show_query=false)
{
$conn = new mysqli(...)
$offset = 0;
foreach ($vals as $v)
{
$cv = $conn->real_escape_string($v);//escape the value for avoiding sql injection
$fv = ($v===NULL) ? 'NULL':"'".$cv."'"; //if value is null then insert NULL in db
$qpos = strpos($query, '?', $offset);//replace the ? with the valeue
$query = substr($query, 0, $qpos).$fv.substr($query, $qpos+1);
$offset = $qpos+strlen($cv)+1;
}
$result = $conn->query($query);
if($show || $result===false) echo $query."<br>";
$rows = array();
if($result===true)
{
return $conn->affected_rows;
}
else if($result===false)
{
return false;
}
else
{
while ($row = $result->fetch_array(MYSQLI_ASSOC) )
{
$rows[]=$row;
}
}
return $rows;
}
function lastid()
{
return $this->qval("SELECT LAST_INSERT_ID()");
}
q('INSERT INTO USER(name, email) VALUES(?,?)', array('admin','admin@admin.com'));
$id = lastid();