【问题标题】:ODBC/MYSQL Insert a Query Result from ODBC to a databse in MYSQLODBC/MYSQL 将 ODBC 的查询结果插入 MYSQL 中的数据库
【发布时间】:2014-12-01 04:15:23
【问题描述】:

我正在通过 ODBC 连接连接到云数据库:

$conn = odbc_connect('MYDATABASE','','');
if (!$conn) {
    exit("Connection Failed: " . $conn);
}

$sql = "SELECT DATETIME_ID, NAME, Sum(CNDROP) AS DATA
        FROM   MY_TABLE
        WHERE DATETIME_ID>='2014-09-28:00:00:00'
          and DATETIME_ID<='2014-09-28 23:00:00'
          and NAME IN ('CC2')
        GROUP BY DATETIME_ID, NAME ORDER BY DATETIME_ID, NAME";

$rs = odbc_exec($conn,$sql);
if (!$rs) {
    exit("Consulta fallida");
}

$result = odbc_exec($conn,$sql) or die(exit("Error en odbc_exec"));
print odbc_result_all($result,"border=1");

odbc_close($conn);

我可以获取数据并打印数据,但现在我需要将数据插入到我的计算机中的 MySQL 数据库中。

我不知道该怎么做,所以我需要一个例子的帮助。我试图在谷歌上搜索,但没有任何帮助。

【问题讨论】:

  • 您是否在 Google 上搜索过您的问题或查看了手册? php.net/manual/en/function.odbc-exec.php
  • @Fred-ii- 是的,我做到了。但我没有看到任何将查询迁移到 mysql 数据库中的表的信息。
  • 所以 Luis,真正的问题是,您想使用查询的结果,然后根据它插入,对吗?
  • @Fred-ii- 是的,我想将查询结果插入另一个数据库(localhost mysql 数据库),
  • 如果您想进一步研究,请参阅 Stack stackoverflow.com/q/4241621 和 Google“从查询 mysql 插入其他表”上的此问答。

标签: php mysql database odbc


【解决方案1】:

选项 1:

选择功能

function get_data_from_cloud(){
    $conn=odbc_connect('CLOUD','','');
    if (!$conn) {
        exit("Connection Failed: " . $conn);
    }
    $sql="SELECT DATETIME, NAME, CNDROP 
          FROM TABLE1 
          WHERE DATETIME>='2014-09-28 00:00:00' and 
                DATETIME<='2014-09-28 23:00:00' and 
                NAME IN ('PETER') 
          GROUP BY DATETIME, NAME 
          ORDER BY DATETIME, NAME";

    $result=odbc_exec($conn,$sql)or die(exit("Error en odbc_exec"));

    $data = array();
    while (odbc_fetch_row($result)) {
        $data[]=array('DATETIME' => odbc_result ($result, "DATETIME"), 
                      'NAME'=> odbc_result ($result, "NAME"), 
                      'CNDROP'=> odbc_result ($result, "CNDROP"));
    }
    return $data;   
}

插入函数

function insert_cloud_data($cloud_data=array()){
    $conn=odbc_connect('LOCAL','','');
    if (!$conn) {
        exit("Connection Failed: " . $conn);
    }
    foreach($cloud_data as $data){
        $sql = sprintf("INSERT INTO Prueba (DATIME, NAME, CNDROP)
                       VALUES ( '%s','%s','%s')",
                      $data['DATETIME'], $data['NAME'], $data['CNDROP']);
        $rs = odbc_exec($conn,$sql);    

        if (!$rs) {
            error_log("Consulta fallida");
        }   
    }

    odbc_close($conn);
}


选项 2:

选择功能

function get_data_from_cloud(){
    $conn=odbc_connect('CLOUD','','');
    if (!$conn) {
        exit("Connection Failed: " . $conn);
    }
    $sql="SELECT DATETIME, NAME, CNDROP 
          FROM TABLE1 
          WHERE DATETIME>='2014-09-28 00:00:00' and 
                DATETIME<='2014-09-28 23:00:00' and 
                NAME IN ('PETER') 
          GROUP BY DATETIME, NAME 
          ORDER BY DATETIME, NAME";

    $result=odbc_exec($conn,$sql)or die(exit("Error en odbc_exec"));

    $data = array();
    while (odbc_fetch_row($result)) {
        $data[]=array(odbc_result ($result, "DATETIME"),
                      odbc_result ($result, "NAME"),
                      odbc_result ($result, "CNDROP"));
    }
    return $data;   
}

插入函数

function insert_cloud_data($cloud_data=array()){
    $conn=odbc_connect('LOCAL','','');
    if (!$conn) {
        exit("Connection Failed: " . $conn);
    }

    $sql = "INSERT INTO Prueba (DATIME, NAME, CNDROP)
            VALUES (?, ?, ?)";
    $stmt = odbc_prepare($conn, $sql);
    if(!$stmt) die("could not prepare statement ".$sql);

    foreach($cloud_data as $data){
        odbc_execute($stmt, $data);  
    }

    odbc_close($conn);
}

用法

$cloud_data = get_data_from_cloud();
insert_cloud_data($cloud_data);

【讨论】:

  • 非常感谢,我现在理解逻辑了,但我得到那些错误“未定义的变量:Query_ID”和“odbc_result() 期望参数 1 是资源,给定的空值”非常感谢。
  • 爱你,非常感谢,它现在似乎可以工作了,顺便说一下“sprintf”而不是“sprint”:)。我能问你最后一件事吗?
  • 当我获得更多声望时,我一定会投票。好的,我的最后一个疑问是 DATETIME 是时间戳格式,反映了类似 2014-09-04 00:00:00,我正在使用 Microsoft Access,我需要更改它以格式化“日期”字符串,因为它给了我一个错误(标准表达式中的数据类型不匹配。),但我想在那个新的“日期字符串”中显示时间戳“2014-09-04 00:00:00”的确切日期,我不知道我是否解释得好。谢谢美达。
  • @LuisSira INSERT INTO Prueba (DATIME, NAME, CNDROP) VALUES ( #%s#,'%s','%s'
  • 查询表达式“#2014-09-28 00:00:00.000000”中的日期语法错误
【解决方案2】:

这是不同的方法。

创建 $conn1(云)和 $conn2(本地主机)。查询 $conn1 然后使用 php while 并在 $conn2 中插入命令。

$conn1 = (cloud);
$conn2 = (localhost);

$query = "SELECT ...";
$result = odbc_exec($conn1,$query);
while( fetch result data ) {
   $query = "INSERT ....";
   odbc_exec($conn2,$query);
}

【讨论】:

  • @Luis Sira 对于您的INSERT 声明,您需要使用ODBC_RESULT 在后面添加值。
猜你喜欢
  • 2016-07-01
  • 2012-06-17
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
相关资源
最近更新 更多