根据post的id从oracle查询相关姓名,年龄然后再批量insert到mysql,如何返回插入成功的数据量?
如下插入不成功,有更优方案吗?
<?php
require_once dirname(__FILE__).'/../common.php';
session_start();
$id = $_POST['id'];
$id_clause = "'" . str_replace("\n", "','", $id) . "'"; //前端换行传来的id分隔处理
require '../connect_oracle.php'; //链接oracle数据库
//通过id从oracle查询数据
$sql1 ="select a.id,a.name,a.age,a.mark from (
select t.id,t.name,t.age,t.mark,to_char(input_time, 'yyyy-mm-dd hh24:mi:ss')as
new_time,row_number() OVER(PARTITION BY id ORDER BY t.input_time desc) as row_flg from table t where t.id in ($id_clause) and t.mark='0') a where a.row_flg = '1'";
$success = array();
$failed = array();
foreach ($conn->query($sql1,PDO::FETCH_ASSOC) as $res) {
$id = $res['ID'];
$name= $res['NAME'];
$age= $res['AGE'];
$mark = $res['MARK'];
require '../pdo_connect_db.php';//链接mysql
//插入mysql
$result = $pdo->exec("INSERT INTO mytable (id,name,age,mark)
values(
'$id',
'$name',
'$age',
'$mark')");
}
if ($result > 0)
{
$success[] = array('code' => 0, 'msg' => '发送成功');
}else{
$failed[] = array('code' => 1, 'msg' => '发送失败');
}
echo json_encode(array_merge($success, $failed));
?>
【以下回答由 GPT 生成】
优化后的代码如下所示:
<?php
require_once dirname(__FILE__).'/../common.php';
session_start();
$id = $_POST['id'];
$id_clause = str_replace("\n", "','", $id); // 前端换行传来的id分隔处理
require '../connect_oracle.php'; // 链接Oracle数据库
// 通过id从Oracle查询数据
$sql1 = "select a.id,a.name,a.age,a.mark from (
select t.id,t.name,t.age,t.mark,to_char(input_time, 'yyyy-mm-dd hh24:mi:ss') as
new_time,row_number() OVER(PARTITION BY id ORDER BY t.input_time DESC) as row_flg from table t where t.id in ('$id_clause') and t.mark='0') a where a.row_flg = '1'";
$success_count = 0;
try {
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
foreach ($conn->query($sql1, PDO::FETCH_ASSOC) as $res) {
$id = $res['ID'];
$name = $res['NAME'];
$age = $res['AGE'];
$mark = $res['MARK'];
require '../pdo_connect_db.php'; // 链接MySQL数据库
// 插入到MySQL
$stmt = $pdo->prepare("INSERT INTO mytable (id,name,age,mark) VALUES (?, ?, ?, ?)");
$stmt->execute([$id, $name, $age, $mark]);
$success_count += $stmt->rowCount();
}
$response['success_count'] = $success_count;
$conn->commit();
} catch(PDOException $e) {
$conn->rollBack();
$failed[] = array('code' => 1, 'msg' => '发送失败');
}
$responseJson = json_encode($response);
echo $responseJson;
优化解决方案说明:
rowCount
方法获取每次插入操作影响的行数,并累加到$success_count
变量中。$success_count
赋值给响应数据中的success_count
字段。$failed
数组表示发送失败。这样优化后的代码可以确保数据库连接和查询的正确性,并通过成功插入的数据量来提供返回的响应数据中的success_count
字段。
【相关推荐】