使用 PHP 将多行 Oracle 结果集插入 MYSQL
Posted
技术标签:
【中文标题】使用 PHP 将多行 Oracle 结果集插入 MYSQL【英文标题】:Insert Multi Row Oracle result set into MYSQL using PHP 【发布时间】:2017-09-18 03:04:38 【问题描述】:一点背景。我有一个 Oracle 数据库,我试图查询然后插入到本地 mysql 数据库中,以便生成罐头报告。一段时间以来,我一直试图弄清楚这个插入到 Mysql 中的内容。我的 Oracle 部分运行正常,但是当我尝试插入时,我在 mysql 中遇到了语法错误。
结果集返回 8 行,其中第一行是 MYSQL 中的 Key。我真的很想将我构建的这个插入查询转换为重复键更新语句上的插入,但我不知道如何正确执行此操作。你们可以提供的任何帮助将不胜感激。
$db1 = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=HOST)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME=Service)))';
$c1 = oci_connect("Userid", "Pass", $db1);
$sql = oci_parse($c1, "select statement") ;
oci_execute($sql);
$i = 0;
while ($row = oci_fetch_array($sql))
$i++;
$k = $row[0];
$dte = $row[1];
$cus = $row[2];
$odr = $row[3];
$lin = $row[4];
$cas = $row[5];
$lpo = $row[6];
$cpl = $row[7];
$cpo = $row[8];
;
$db_user = "userid";
$db_pass = "Pass";
$db = new PDO('mysql:host=host; dbname=databasename', $db_user, $db_pass);
$stmt = $db->prepare("INSERT INTO `cuspi` (k, dte, cus, odr, lin, casa, lpo, cpl, cpo) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
$recordcount = count($k);
for ($i = 0; $i < $recordcount; $i++)
$records[] = [
$k[$i],
$dte[$i],
$cus[$i],
$odr[$i],
$lin[$i],
$casa[$i],
$lpo[$i],
$cpl[$i],
$cpo[$i],
];
foreach ($records as $record)
$stmt->execute($record);
?>
【问题讨论】:
那么,什么是语法错误? Array ( [0] => 42000 [1] => 1064 [2] => 您的 SQL 语法有误;请查看与您的 MySQL 服务器版本对应的手册以获取正确的语法在'lin,casa,lpo,cpl,cpo附近使用)值('0','0','N','1','6','6','6','1','6' '' 在第 1 行 ) array(1) [0]=> array(9) [0]=> string(1) "0" [1]=> string(1) "0" [2]=>字符串(1)“N”[3]=>字符串(1)“1”[4]=>字符串(1)“6”[5]=>字符串(1)“6”[6]=>字符串( 1) "6" [7]=> 字符串(1) "1" [8]=> 字符串(1) "6" 【参考方案1】:我能够找出答案。我错过了插入的列引用周围的重音。
原创
$stmt = $db->prepare("INSERT INTO `cuspi` (k, dte, cus, odr, lin, casa, lpo, cpl, cpo) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
固定
$stmt = $db->prepare("INSERT INTO `cuspi` (`k`, `dte`, `cus`, `odr`, `lin`, `casa`, `lpo`, `cpl`, `cpo`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
【讨论】:
以上是关于使用 PHP 将多行 Oracle 结果集插入 MYSQL的主要内容,如果未能解决你的问题,请参考以下文章