【问题标题】:mysqli to postgres databasemysqli 到 postgres 数据库
【发布时间】:2015-10-30 09:45:57
【问题描述】:

我创建了一个脚本来将数据从 mysqli 数据库插入到 postgres 数据库中

<?php
      $conn = new mysqli(...........);
      if ($conn->connect_error) {
      die("Connection fialed: " . $conn->connect_error);
      }
      else
      {
      echo "MySQL connection successfull\n";
      }
      $db = pg_connect(.................);
      if(!$db){
      echo "Error : Unable to open database\n";
      } else {
      echo "PostgreSQL connection successfull\n";
       }
      $sql = "SELECT * FROM crm_subscriptions";
      echo $sql . "\n";
      $result = $conn->query($sql);
      echo $conn->error . "\n";
      if ($result->num_rows > 0) {
       while($row = $result->fetch_assoc()) {
        $psql = "
        INSERT INTO subscriptions_sub (id,cust_id,tarrif_id,des,datetime_created,datetime_modified,credit,credit_limit,status,date_start,date_end,backoffice_userref,backoffice_deleted,backoffice_createdon,backoffice_createdby, backoffice_updatedon,backoffice_updatedby,backoffice_administration,backoffice_readonly,backoffice_order,backoffice_dummy)
        VALUES('" .(int) $row["subscription_id"] . "','" . (int) $row["customer_id"] . "','" . (int) $row["tariffplan_id"] . "','" . $row["description"] . "',NULLIF('" . $row["datetime_created"] . "','0000-00-00 00:00:00')::timestamp,NULLIF('" . $row["datetime_modified"] . "','0000-00-00 00:00:00')::timestamp,'" . (int) $row["credit"] . "','" . (int) $row["credit_limit"] . "','" . $row["status"] . "',NULLIF('" . $row["date_start"] . "','')::timestamp,NULLIF('" . $row["date_end"] . "','')::timestamp,'" . (int) $row["backoffice_userref"] . "','" . (int) $row["backoffice_deleted"] . "',NULLIF('" . $row["backoffice_createdon"] . "','0000-00-00 00:00:00')::timestamp,'" . (int) $row["backoffice_createdby"] . "',NULLIF('" . $row["backoffice_updatedon"] . "','0000-00-00 00:00:00')::timestamp,'" . (int) $row["backoffice_updatedby"] . "','" . (int) $row["backoffice_administration"] . "','" . (int) $row["backoffice_readonly"] . "','" . (int) $row["backoffice_order"] . "','" . (int) $row["backoffice_dummy"] . "');
        ";
        print_r($row);      
        $ret = pg_query($db, $psql);
        if(!$ret){
            echo pg_last_error($db);
        } else {
            echo "Records created succesfully\n";
        }       
        }
        } else {
    echo "0 results \n";
      }
       ?>

当我运行它时,我得到了这个错误:

类型时间戳的输入语法无效:"" in /home/ruud/Database2.php 第 38 行
错误:输入语法无效 对于类型时间戳:“”root@149-210-204-94:/home/ruud#
错误: 类型时间戳的无效输入语法:“”数组

datetime_created 和 datetime_modified 来自类型 TIMESTAMP date_start 和 date_end 来自类型 DATE backoffice_createon 和 backoffice_update on 来自类型 DATETIME

【问题讨论】:

    标签: php database postgresql mysqli


    【解决方案1】:

    您需要安装一个 postgres 驱动程序/模块,因为 mysqli 是 mysql 的驱动程序。

    sudo apt-get install php5-pgsql
    

    或者如果安装了包,需要在php.ini中开启de模块

    extension=php_pgsql.dll (windows)
    extension=php_pgsql.so (linux)
    

    您可能已经安装了它。检查你的phpinfo();

    【讨论】:

    • 我已经编辑了我的 php.ini 并执行了 phpinfo();但我在 phpinfo 中找不到任何有趣的东西。我需要在哪里寻找?
    • 我建议使用专用工具将数据从 mysql 迁移到 postgres。 MySql 的日期像 00-00-0000 不存在,会被 Postgres 拒绝。像 PgLoader 这样的工具可以处理这种情况。
    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    相关资源
    最近更新 更多