php - 如何从Firebird数据库读取数据并将数据插入MSSQL数据库?

标签 php mysql sql sql-server sqlsrv

我想从 Firebird 数据库中选择一些列并将它们插入到 MSSQL 数据库表中。

当我从 Firebird 读取表时,它准确地代表了我在本地主机中需要的内容,然后当我想将数据插入 MSSQL 时,它只插入最后一条记录。我不知道是什么原因造成的,这是我第一次尝试这个想法。

有人能告诉我出了什么问题吗?

这是我的 PHP 代码:

<?php
$host = 'localhost:c:\firebird.fdb'; 
$username=''; 
$password='';

$dbh = ibase_connect($host, $username, $password);
$stmt = "SELECT * FROM TWEEKDAY";
$sth = ibase_query($dbh, $stmt);
while ($row = ibase_fetch_object($sth)) {
$R1 = $row->CODE;
$R2 = $row->DAYNAME;
    echo $R1 ." ". $R2  . "\n";
    echo "</br>";
}
ibase_close($dbh);

/**********************************************/

$host = "servername\instancename";
$connectionInfo = array( "Database"=>"MSSQLdatabase", "UID"=>"", "PWD"=>"");
$conn = sqlsrv_connect( $host, $connectionInfo);
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
echo "</br>"; 

$tsql =  "INSERT INTO [AccessCard].[dbo].[WEEKDAY] (DAYID,DAYN) VALUES ('$R1','$R2')";

$stmt = sqlsrv_query( $conn, $tsql); 

if ( $stmt === false )    {    
     die( print_r( sqlsrv_errors(), true));    
} 
 while( $obj = sqlsrv_fetch_object( $stmt ,  SQLSRV_FETCH_ASSOC) ) {
      echo $obj->DAYID ."&nbsp ". $obj->DAYN . "<br />";
}
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);
?>

当我运行代码时,它在本地主机中显示为:PIC1 当我打开 mssql 数据库时,该表有:PIC2 看起来它插入了 $R1 $R2 的最后一个值。

当我使用此代码时:

<?php
$host = 'localhost:c:\FIREBIRD.fdb'; 
$username=''; 
$password='';

$dbh = ibase_connect($host, $username, $password);
$stmt = "SELECT * FROM TWEEKDAY";
$sth = ibase_query($dbh, $stmt);
while ($row = ibase_fetch_object($sth)) {
$R1 = $row->CODE;
$R2 = $row->DAYNAME;
    echo $R1." ". $R2  . "\n";
    echo "</br>";
}
ibase_close($dbh);

/**********************************************/

$host = "SERVERNAME\INSTANCENAME";
$connectionInfo = array( "Database"=>"AccessCard", "UID"=>"", "PWD"=>"");
$conn = sqlsrv_connect( $host, $connectionInfo);
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
echo "</br>"; 

for ($RIdx = 0; $RIdx < count($R1); $RIdx++) { // each $R array value

  $tsql =  "INSERT INTO [AccessCard].[dbo].[WEEKDAY] (DAYID,DAYN) VALUES ('$R1[$RIdx]','$R2[$RIdx]')"; 
  $stmt = sqlsrv_query( $conn, $tsql); 
  if ( $stmt === false )    {    
     die( print_r( sqlsrv_errors(), true));    
  }
} // end of insert loop 

sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);
?>

这是数据库中显示的内容:PIC3

最佳答案

$R1 应该是一个数组,如 $R1[] = $row->CODE;显然还有$R2'。相应地更改您的 sqlserver 插入。我这里没有安装 sql server,所以我无法提供经过测试的代码。 这是sql服务器代码...

$host = "servername\instancename";
$connectionInfo = array( "Database"=>"MSSQLdatabase", "UID"=>"", "PWD"=>"");
$conn = sqlsrv_connect( $host, $connectionInfo);
if( $conn === false ) {
    die( print_r( sqlsrv_errors(), true));
}
echo "</br>"; 

for ($RIdx = 0; $RIdx < count($R1); $RIdx++) { // each $R array value

  $tsql =  "INSERT INTO [AccessCard].[dbo].[WEEKDAY] (DAYID,DAYN) VALUES ('$R1[$RIdx]','$R2[$RIdx]')"; 

  $stmt = sqlsrv_query( $conn, $tsql); 

  if ( $stmt === false )    {    
     die( print_r( sqlsrv_errors(), true));    
  }

} // end of insert loop 


sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);
?>

关于php - 如何从Firebird数据库读取数据并将数据插入MSSQL数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22297976/

相关文章:

mysql - 在 shell 脚本中执行 mysql 查询

python - 如何为一对多关系中的反向关系编写 Django ORM 查询?

mysql - 嵌套不存在

php - 大型 MySQL 查询和插入

php - 在 foreach 中对数组中的项目进行分组和求和

php - Twitter 搜索 api 请求因国际字符而失败

mysql - 估计 mysql 中读/写查询的数量

mysql - 如何使用一个查询跨多个表进行删除?

php - 如何在 Windows 计算机上使用 PHP 旋转 pdf 内容?

php - 在匿名回调中使用 'self'?