سؤال

I want to select some columns from Firebird database and insert them in MSSQL database tables.

When I read the table from Firebird it represent exactly what I need in the localhost, then when I want to insert the data into MSSQL it only inserts the last record. I don't know what cause this, and it's my first time to try this idea.

Would someone tell me what goes wrong?

This is my PHP code:

<?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);
?>

When i run my code, it shows in local host as :PIC1 and when i open the mssql database that what the table have:PIC2 it seems like it insert the last value of $R1 $R2.

and when i use this code:

<?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);
?>

This is what show in the database:PIC3

هل كانت مفيدة؟

المحلول 2

Finaly the problem solved: here is the solution code

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

$dbh = ibase_connect($host, $username, $password);
$stmt = "SELECT * FROM TWEEKDAY";

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

$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>"; 

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

$sth = ibase_query($dbh, $stmt);
while ($row = ibase_fetch_object($sth)) {
$R1 = $row->CODE;
$R2 = $row->DAYNAME;
    echo $R1." ". $R2  . "\n";
    $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) ) {
      echo $obj->$R1."&nbsp ". $obj->$R2. "<br />";
      $obj++; 
}
    echo "</br>";
}
ibase_close($dbh);
sqlsrv_free_stmt( $stmt);  
sqlsrv_close( $conn);
?>

thank you Ryan for your help, it seems that the solution came to my mind while i'm editing my question. thanks again.

نصائح أخرى

$R1 should be an array, as in $R1[] = $row->CODE; Also $R2' obviously. Change your sqlserver insert accordingly. I don't have sql server installed here so i cannot provide tested code. Here is the sql server code...

$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);
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top