thinkphp5.0中往表中添加多条记录,怎么获取到所有添加的ID?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了thinkphp5.0中往表中添加多条记录,怎么获取到所有添加的ID?相关的知识,希望对你有一定的参考价值。

$file = explode(",",$_POST['file']);
//var_dump($file);exit;
$file2 = array_filter($file);
foreach ($file2 as $v)
$insert = Db::execute('insert into files(file) value ("'.$v.'")');


怎么获取到$insert的所有值(只返回了一个ID)
var_dump($insert);exit;
使用的是tp5框架(5.0.5)的

你好,用sql语句是不可能实现的,我们可以通过事务来实现,也就是说,SqlCommand的CmdText属性在一个方法当中可以赋多个SQL语句 SqlConnection sqlConnection = new SqlConnection(); ...初始化连接 // 开启事务 SqlTransaction sqlTransaction = sqlConnection.BeginTransaction(); // 将事务应用于Command SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = sqlTransaction; sqlCommand.CmdText=第一个sql语句 sqlCommand.ExcuteNoneQuery(); sqlCommand.CmdText=第二个sql语句 sqlCommand.ExcuteNoneQuert(); try // 利用sqlcommand进行数据操作 ... // 成功提交 sqlTransaction.Commit(); catch(Exception ex) // 出错回滚 sqlTransaction.Rollback(); 如果在执行第二次SQL语句是出错了,那么就会到Catch异常中,执行回滚,那么第一次执行的也同样回滚了,所以必须2个都一行成功才往数据库中提交这里是用了2次SQL语句,如果你想用1个语句同时操控2个表的话,就要用到存储过程或者是触发器,存储过程和触发器追问

大佬您好!请问使用tp5框架也是那样写吗?

参考技术A $insert[]=这样,然后就可以得到全部的插入id了追问

试过,报错了

追答

在foreach外面先定义一下这个变量就不会报错了

追问

大佬您好!这样的话,返回的是 1 呀!

追答

那换个方法,有个方法是可以获取写入的id,每个框架不一样,原生的好像是getinsertid什么的,具体你查下

追问

大佬getinsertid这个只能获取到一个,我想获取到所有的id。比如添加了4条数据,然后查出4条数据的id,这样可以实现吗?

本回答被提问者采纳
参考技术B 问下楼主怎么解决的 我也遇到这个问题了

使用ajax+php在mysql表中同时添加多条记录

【中文标题】使用ajax+php在mysql表中同时添加多条记录【英文标题】:Adding multiple record at same time in mysql table using Ajax+php 【发布时间】:2012-02-22 00:21:32 【问题描述】:

我正在尝试使用 PHP 在 MySQL 数据库中一次插入多行。我想在 3 个不同的行中插入 a、b、c,但它以这种格式 a、b、c 插入到 1 个单行中。

我的代码在下面,它没有给我任何错误,因为代码运行良好,但我无法得到我想要的结果。

<?php
require_once('conn.php');
$name = $_POST['name'];
 if($name)
 
    foreach($name as $std_name)
    
    $student[] = $std_name;
    // implode($c); i.e a,b,c etc
    
 
$sql = "INSERT INTO `tbl_student` 
 (`student_name`) 
 VALUES 
 ('".implode($student, ',')."');";
 $res = mysql_query($sql);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript"> 

    var nFloor = "";    

    function removeField(nField)

        nField.parentNode.parentNode.removeChild(nField.parentNode);
    

    function insertField()

        var newFieldContainer = document.createElement('div');
        var newFieldLabel = document.createElement('label');
        newFieldLabel.innerHTML = "Student Name:&nbsp;&nbsp;&nbsp;";        
        var newField = document.createElement('input');
        newField.type = "text";
        newField.name = "vipInfo[]";
        newFieldContainer.appendChild(newFieldLabel);
        newFieldLabel.appendChild(newField);
        var deleteBtn = document.createElement('input');
        deleteBtn.type = "button";
        deleteBtn.value = "Remove";
        deleteBtn.style.marginLeft = "5px";
        deleteBtn.onclick = function()removeField(this);
        newFieldContainer.appendChild(deleteBtn);
        document.forms[0].insertBefore(newFieldContainer,nFloor);
    

    function init()

        var insertBtn = document.getElementById('newFieldBtn')
        insertBtn.onclick = function()
            
             insertField();
            
        nFloor = insertBtn;     
    

    navigator.appName == "Microsoft Internet Explorer" ? attachEvent('onload', init, false) : addEventListener('load', init, false);    

</script>
</head>
    <body>
        <form action="" method="post">

            <div class="field"><label>Student Name:&nbsp;&nbsp;&nbsp;<input type="text" name="name[]"></label></div>

            <input type="button" id="newFieldBtn" value="New Field"> 
            <input type="submit" name="submit" value="Submit">

        </form>
    </body>
</html>

【问题讨论】:

echo $sql,它返回什么? 检查这个 -> ***.com/questions/8667384/… @Dagon echo $sql 给我这个结果 INSERT INTO tbl_student (student_name) VALUES ('a,b,c');但我希望它插入 3 个不同的行,即 3 个不同的记录 【参考方案1】:

提出这个问题

$sql = "INSERT INTO `tbl_student` 
 (`student_name`) 
 VALUES 
 ('".implode($student, ',')."');";
 $res = mysql_query($sql);

foreach 块内 不要使用 implode 或者使用下面的查询作为

$sql = "INSERT INTO `tbl_student` 
 (`student_name`) 
 VALUES 
 ('". $std_name."');";

所以它会将每一个添加到不同的行中

【讨论】:

它只将最后一个值插入到表中作为 INSERT INTO tbl_student (student_name) VALUES ('b');【参考方案2】:

使用这个:

$val="('".implode("'), ('",$student)."')";
        $sql = "INSERT INTO `tbl_student`
 (`student_name`) VALUES ".$val.";";

【讨论】:

以上是关于thinkphp5.0中往表中添加多条记录,怎么获取到所有添加的ID?的主要内容,如果未能解决你的问题,请参考以下文章

怎么在Java中往数据库表插入新的内容

用insert into 怎么添加多条记录

mysql不能往表中的列插入中文,求大神解答,在线等~~~

Navicat for MySQL怎么往表中填数据

Navicat for MySQL怎么往表中填数据

怎么向informix数据库表中一次插入多条记录