2017-03-09 49 views
1

我想從遷移的Postgres到Sybase約10桌與PHP腳本。從遷移到Postgres的Sybase與PHP腳本

到目前爲止,我完成了刪除腳本,剛剛清空所有對目標數據庫所需的表。

遷移腳本截至目前,能夠同時連接到數據庫,並打印出的內容。除此之外,我指望行檢查,如果目標表中源表匹配,繼後INSERT(筆者近日瞭解到參數的@@ ERROR其正確檢查全成SQL,並調整這一點)。


我現在的問題是,我得到一個錯誤信息:

警告:sybase_query()的Sybase:服務器消息: 附近有語法錯誤 '1'。 (嚴重性15,程序N/A)在.../.../...

當試圖從Postgres數據庫中將所選行插入到Sybase數據庫中時。 因此,我使用的FETCH_ASSOC方法來讀取每行的數據。這種方法的問題,它會返回一個字符串,而不是一個整數,如下所示:http://php.net/manual/de/function.pg-fetch-assoc.php

在我的代碼的特定點lookslike這樣的:

   while ($row = pg_fetch_assoc($result)) { 
       $insert_dst = $destDB->query("SET IDENTITY_INSERT " . $dst_sy_tbl . " ON INSERT INTO " . $dst_sy_tbl . " (Integerfield, SOME_TEXT1, SOME_TEXT2) VALUES(". $row['integerfield'] . " '" . $row['some_text1'] . "', '" . $row['sometext2'] . "')" ); 
       } 

源表整數格式化爲INT4,目標表整數是數字(8,0)。所提到的方法現在試圖將一個字符串插入到「integerfield」列中,該列需要一個用數字(8,0)格式化的整數。

有沒有更好的方法在PHP中接收來自Postgres的數據,以便它們按原樣存儲,而無需先將其格式化爲字符串,然後將該字符串轉換回整數?


注:我還嘗試了用普通SQL所希望的結果,在黑板上這裏看到:Insert into ... values (SELECT ... FROM ...)

但對我databasetool執行這一點,缺少訪問,因爲它的SRC_Table許可位於不同的數據庫上。 - 也許在php腳本中這將起作用,因爲這兩個連接已經建立,並且我能夠打印這兩個表的內容。

SET IDENTITY_INSERT DST_Table ON INSERT INTO db_name.of.DST_Table(Integer, SOME_TEXT1, SOME_TEXT2) SELECT integer, some_text1, some_text2 FROM db_name.of.SRC_Table; 
+0

我完全誤解了錯誤信息,並認爲如果ResultSet的每一行給出了一個字符串它是壞的。最後,我將放入一個SQL插入命令,無論如何它都是由字符串組成的。我的錯誤是,我把整數作爲'1'而不是1。另一個錯誤是錯誤的比較方法,我從GO方向Sybase複製到Postgres腳本,將RETURN方向Postgres複製到Sybase我必須將「字符串」調整爲「varchar」,將「datetime」調整爲「timestamp」 –

回答