使用 PHP 并使用 MYSQLI。尝试获取从具有多个值的单个插入查询插入的所有行的 insert_id。将其保留在一次调用中以提高效率。我的实际代码在一个插入查询中有数百个值。不过,这里有一些仅包含 4 个值的插入的示例代码:
$sql = "INSERT INTO link_tags ( string_names_id, urls_id )
VALUES ( '2', '17' ), ( '8', '31' ), ( '8', '1' ), ( '8', '4' )";
$mysqli->query($sql);
echo "id's: " .$mysqli->insert_id;
Run Code Online (Sandbox Code Playgroud)
上面的代码实现了插入,但只给出了调用中第一个插入的 id。如何检索该单个查询的所有 ID?
我需要从最后一次插入中获取story_id.香港专业教育学院尝试使用,mysql_insert_id()但它似乎不适用于我的陈述.这是代码:
$stmt = $this->db->prepare("INSERT INTO active_stories (story_id, current_chapter, creator, cover_title, cover_img_name, create_date, last_update_date, story_tags, locked) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("issssssi",$zero, $creatorName,$storyTitle, $fileName, $createDate, $createDate, $themeTags, $zero);
$stmt->execute();
printf("Last inserted record has id %d\n", mysql_insert_id());
$stmt->close();
Run Code Online (Sandbox Code Playgroud) 我是Codeigniter的新手..
所以这是我的表:
request_id | login_name | login_password | reg_date | 状态
$this->db->insert_id()如果主要自动增量列名称request_id不是,我可以用来获取最后插入的ID id吗?
任何帮助将不胜感激..
我认为我在一些 PHP 代码中存在竞争条件,其中 mysql_insert_id() 返回 0 - 但我无法弄清楚为什么。
$insertsess=mysql_query("insert into cior_sessions values ('','$cid','$uid','$tutook',STR_TO_DATE('$sessiondate','%d/%m/%Y'),'$sessionnum')");
$sessionid=mysql_insert_id($insertsess);
echo "<input type=\"hidden\" name=\"sid\" id=\"sid\" value=\"" . $sessionid . "\">";
Run Code Online (Sandbox Code Playgroud)
我自己无法复制这个问题,但可以看到其他用户也有这样的情况(因为他们随后所做的事情是 SID 为 0 的结果,但并非一致)。
我对此的理解是 mysql_insert_id 会等待 $insertsess 的查询完成 - 这是错误的吗?如果是这样,我是否需要有一些东西,例如看门狗循环,等待 mysql_insert_id 返回零以外的东西?这似乎有点愚蠢。:/
我们知道mysql_insert_id()将给出最后插入的ID,但我想知道在下面的情况下我们是否会遇到问题.
UserA - >调用一个函数,该函数将ROW插入TABLE并获取插入的ID
执行日期:2013-10-01 10:18:25
行ID:1
UserB - >调用一个函数,它将一个ROW插入一个TABLE并获取插入的ID
执行日期:2013-10-01 10:18:26
行ID:2
请注意,执行时间仅相差一秒钟.
假设UserB在UserA执行mysql_insert_id()之前完成了该行的插入
UserA是否会获得ROW ID:1或ROW ID:2的值
我一直在环顾四周,但大多数教程都显示了,mysql_insert_id()但它在同一个文档中。我想知道是否有一种方法可以获取列的最后一个 id 并将其回显出来。
$image = mysql_query("SELECT * FROM images WHERE id=$id");
$image = mysql_fetch_assoc($image) or die(mysql_error());
$image = $image['image'];
header("Content-type: image/jpeg");
echo $image;
Run Code Online (Sandbox Code Playgroud)
这是我的代码,它从数据库中获取图像并将 blob 转换为 id?=1,这是图片,但作为 php。那是来自另一个 php 文档的上传者,但我正在输入以输出另一页上该列的最后一个 ID(不是图片,而是统计数字)
一些可以做到这一点的代码会非常有帮助。
我希望在将数据插入数据库后返回id.
很多人很有可能同时提交表格.
我不希望在结果中显示错误的ID,因为此ID也将记录在另一个数据库日志中,并用于上载显示给用户的下一个表单中的文件.
如果有几个人同时提交mysqli_insert_id可能会收到错误的ID吗?
对该用户的最新日期条目进行查询并从那里提取id会更好吗?
或者我应该使用mysqli_insert_id然后检查该记录中的用户名以验证它是否正确?
或者我只是担心一些不是问题的事情?
感谢您的任何意见,我对此非常陌生.
金:)
我做了一个函数,在一个表中插入一个新行,在调用一个INSERT语句到mysql之后,然后我做了一些检查,然后检查了它的值mysql_insert_id().
我想要保持安静,因为我知道在得到结果之前,另一个线程无法插入,插入一行mysql_insert_id().
我敢打赌,它应该是安全的,但我在问,因为这个可能是灾难性的.
我有这个代码(参见下文)
$sql = "SELECT * FROM records";
$result = mysqli_query($this->db,$sql);
while($row = mysqli_fetch_assoc($result)){
$itemid = $row['id'];
$itemname = $row['itemname'];
$itemdesc = $row['itemdesc'];
$brand = $row['brand'];
$serialno = $row['serialno'];
$nostock = $row['nostock'];
$price = $row['price'];
$onsale = $row['onsale'];
$poster = $row['poster'];
$thedate = $row['thedate'];
$sql = "INSERT INTO backupp SET id='$itemid', itemname='$itemname', itemdesc='$itemdesc', brand='$brand', serialno='$serialno', nostock='$nostock', price='$price', onsale='$onsale', poster='$poster', thedate='$thedate'";
$result = mysqli_query($this->db,$sql) or die(mysqli_error($this->db));
return $result;
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码中可以看出,它将首先从名为"records"的db表中提取所有数据,然后将每一行放入相应的变量中,然后插入存储的数据(那些已从db表名中提取的数据)将"并存储在那里的相应变量"记录到名为"backupp"的db表中.现在,问题是,它只添加一条备份记录(首先被拉出的记录),据说它应该将所有从db表命名记录中提取的记录添加到db table named backup.为什么??任何建议,建议,线索和想法将不胜感激.谢谢!
PS:它像导出和导入到具有相同结构的其他表但我有我自己的理由为什么我想这样做并假设我已经成功连接到一个名为"库存"的数据库($ this-> db)并且有db表名称,例如"records"和"backupp"具有相同的结构.
我是PHP的新手,但通常能够解决大多数问题,但这个问题让我感到困惑.
我正在尝试使用单个提交按钮创建简报注册(单个字段).我有这个工作正常,发送电子邮件并将表单数据插入我的表.但是,我想添加功能,以便向注册的人发送确认电子邮件.我做了大量的研究,我知道这背后的方法,但我的代码只是没有将数据输入到用于存储确认信息的第二个表中.
我有2个表:名为'newsletter'列的表1是:
idmail,emailaddress,datetime,state
Run Code Online (Sandbox Code Playgroud)
idmail 被设置为 AUTO_INCREMENT
表2名为'confirm'的列是:
idconfirm,emailaddress,confirmkey
Run Code Online (Sandbox Code Playgroud)
这是我的代码(我省略了之后的电子邮件部分,因为所有工作都正常):
//connect to database
include('admin/connection.php');
$email = mysqli_real_escape_string($dbc, $_POST['email']);
//check if value exists in table
$result = mysqli_query($dbc, "SELECT emailaddress FROM newsletter WHERE emailaddress = '$email'");
if (mysqli_num_rows($result)==0) {
//Insert value into database
$query1 = mysqli_query($dbc, "INSERT INTO newsletter(emailaddress, datetime, state) VALUES('$email','$now','0')");
mysqli_query($dbc, $query1);
// Get ID of last record
$id = mysqli_insert_id($dbc);
//Create a random key
$hash = $email.date('mY');
$hash = md5($hash);
//Insert value into database
$query2 = mysqli_query($dbc, "INSERT …Run Code Online (Sandbox Code Playgroud)