使用PHP将clob数据导入MySQL文本列

使用PHP将clob数据导入MySQL文本列,php,mysql,oracle,import,Php,Mysql,Oracle,Import,我编写了一个PHP脚本,将表从Oracle服务器导入MySQL服务器。导入器工作得很好,除了我在MySQL中创建的唯一CLOB列在每一行中都显示为NULL之外。存储在那里的数据只是大量的文本,因此没有任何二进制文件需要目标列是BLOB 以下是我在脚本中使用的相关代码: while ($row = oci_fetch_row($oracle_result)) { // Begin looping through all fields in current row for

我编写了一个PHP脚本,将表从Oracle服务器导入MySQL服务器。导入器工作得很好,除了我在MySQL中创建的唯一CLOB列在每一行中都显示为NULL之外。存储在那里的数据只是大量的文本,因此没有任何二进制文件需要目标列是BLOB

以下是我在脚本中使用的相关代码:

while ($row = oci_fetch_row($oracle_result)) {  
      // Begin looping through all fields in current row
      for($i=0;$i<$num_fields;$i++) {               
          $this_field = $row[$i];       // Get data value for this field
          // $arFieldDefs holds field metadata
          $field_type = $arFieldDefs[$i]['type'];   // Get data type for this field
          $field_name = $arFieldDefs[$i]['name'];   // Get field name for this field

          if (is_null($this_field)) {
            //This field is NULL
            $this_field = "NULL";
          } else {
            // Field is not null, process its data type
            switch ($field_type) {
                case "NUMBER":
                    //str_replace(",", "", $this_field);    //Remove commas from number string
                    break;
                case "INT":
                    //str_replace(",", "", $this_field);    //Remove commas from number string
                    break;
                case "CHAR":
                    $this_field = "'" .addslashes($this_field) ."'";
                    break;
                case "VARCHAR2":
                    $this_field = "'" . addslashes($this_field) . "'";
                    break;
                case "DATE":
                    $this_field = "'" . $this_field . "'";
                    break;
                case "CLOB":
                    // Meaningful var name to remind us we now have an object of PHP class OCI-Lob
                    $clob_obj = $this_field;
                    // Tried read($clob_obj->size()) instead of load()
                    //   but result was the same
                    $field_contents = $clob_obj->load();
                    $this_field = "'" . $field_contents . "'";
                    break;
                default:
                    // $rec_num is the currently looped record number
                    echo "Bad Field Type '" .$field_type ."' in Field: '".$this_field ."' RecNum: " .$rec_num ."\n";
                    die;
            }
          }
          $value_string .= $this_field . ", ";      // Add comma and space after field value
      } // End FOR loop 
// Cleanup and finish:
// Strip trailing comma+space, put $value_string in parentheses,
// And loop back to build another row in the INSERT
} // End WHILE loop

$field\u内容中有撇号吗?echo strlen$字段内容;在中断案例CLOB之前:。您的意思是删除撇号,使行显示:$this_field=$field_contents?否,$field_contents中的撇号会导致问题-导致类似field2='blah blah's blat'的内容注意不平衡的撇号。是的,我省略了撇号,但仍然收到相同的结果。您从echo strlen$field_contents;中得到了什么?我怀疑CLOB没有正确读取。
CREATE TABLE MY_TABLE_NAME (
  ENTRY_ID VARCHAR(11) NOT NULL,
  ELEMENT_NAME VARCHAR(155) DEFAULT NULL,
  SHORT_DATA VARCHAR(255) DEFAULT NULL,
  ELEMENT_DATA_OLD VARCHAR(4000) DEFAULT NULL,
  SM_ID VARCHAR(11) DEFAULT NULL,
  SUBMITTER VARCHAR(254) DEFAULT NULL,
  MODIFIED_DATE INT(11) DEFAULT NULL,
  LAST_MODIFIED_BY VARCHAR(254) DEFAULT NULL,
  SORT_ORDER INT(11) DEFAULT NULL,
  CREATE_DATE INT(11) DEFAULT NULL,
  REPLICATED_DATE DATETIME DEFAULT NULL,
  TYPE INT(11) DEFAULT NULL,
  ELEMENT_DATA MEDIUMTEXT,
  PRIMARY KEY (ENTRY_ID),
  UNIQUE KEY MTN_ENTRYID_PK (ENTRY_ID),
) ENGINE=INNODB DEFAULT CHARSET=utf8`