将 MS-SQL 查询的结果更新到 MySql 数据库

彼得·施特劳斯

在这里遇到了一个我似乎无法弄清楚的问题。我有一个来自对 MS-SQL 数据库的查询的结果集,我需要将其导入到 MySQL 数据库中。不要问为什么,我只是不得不问。下面是我的代码,但是当我运行它时,它对结果没有任何作用。谁能帮我?

      <?php

    putenv("TDSVER=80");
    putenv("FREETDSCONF=/etc/freetds/freetds.conf");
    putenv("ODBCSYSINI=/etc/odbcinst.ini");
    putenv("ODBCINI=/etc/odbc.ini");


    $myServer = "*****";
    $username = "*****";
    $password = "*****";
    $database = "*****";

    //connection to the database
    $dbhandle = mssql_connect($myServer, $username, $password)
    or die("Couldn't connect to SQL Server on $myServer");

    //select a database to work with
    $selected = mssql_select_db($database, $dbhandle)
    or die("Couldn't open database $myDB");

    $sql_connection = mysqli_connect("*****", "*****", "*****", "*****");
if (mysqli_connect_errno()) {
        echo "Failed to connect to the SQL Database: " . mysqli_connect_error();
    }

    $query = "DECLARE @Agent NVARCHAR(250) = '%*****%';
    WITH Agent AS
    (SELECT
        COUNT (r.id) as 'count',
        p.category_id AS 'category'
    FROM
        service_req r LEFT JOIN
        problem_type p on r.problem_type = p.problem_type
    WHERE
        r.problem_sub_type = p.problem_sub_type
        AND r.problem_type = p.problem_type
        AND r.responsibility LIKE @Agent
        AND r.insert_time BETWEEN '2017-06-01 01:00:00' AND '2018-06-01 01:00:00'
        AND p.category_id BETWEEN '491' AND '1050'
        AND r.status IN ('3', '32')
        AND r.escalation IN ('0', '1', '2')
        GROUP BY
            p.category_id,
            p.problem_sub_type), CatList AS
    (SELECT
        COUNT (r.id) as 'count',
        p.category_id AS 'category'
    FROM
        service_req r RIGHT JOIN
        problem_type p ON r.problem_type = p.problem_type
        GROUP BY p.category_id)

    SELECT
        COALESCE(a.COUNT, 0) as 'count'
        --cl.category
    FROM
        Agent AS A RIGHT JOIN
        CatList AS cl ON a.category = cl.category
    ";


    $result = mssql_query($query);
    $numRows = mssql_num_rows($result);
    //display the results
    while ($row = mssql_fetch_array($result)) {

        $query2 = "UPDATE performance_engine_sysaidstat_dino SET points_cat_count = ".($row['count']);
        $result1 = mysqli_query($sql_connection,$query2);




    }

    ?>

当我运行它的 MSSQL 部分而不输出到浏览器时,我确实得到了结果,但是在尝试更新 Mysql db 时,我遗漏了一些东西。

更新:

echo $row['count'] . "<br />";在这里添加了以下代码行

   while ($row = mssql_fetch_array($result)) {

        echo $row['count'] . "<br />";
        $query2 = "UPDATE performance_engine_sysaidstat_dino SET points_cat_count = ".($row['count']);
        $result1 = mysqli_query($sql_connection,$query2) or die(mysqli_error($sql_connection));
 }

并且在运行脚本时,我可以在浏览器中看到我的结果集,但没有任何数据被推送到 MySQL 数据库。

更新 2:

我已经从这里修复了我的语法问题

 $query2 = "UPDATE performance_engine_sysaidstat_dino SET points_cat_count = ".($row['count']);

对此:

 $query2 = "UPDATE performance_engine_sysaidstat_dino SET points_cat_count = '".($row['count'])."'"; 

但现在它只用结果集中的第一个值更新我的 MySQL 数据库。MSSQL 查询返回的数据是 521 行数据(不同的值),这个数据集需要按原样更新到新数据库。

更新 3:

这是 MySQL 表的表结构

id  points_cat_count    points_cat_id   points_cat_points   points_cat_total
1   0   491 0   0
2   0   492 3   0
3   0   493 0   0
4   0   494 1   0
5   0   495 1   0
6   0   496 1   0
7   0   497 3   0
完美的

只需添加一个WHERE子句来UPDATE查询,因为现在每个循环都会更新所有行。具体来说,使用相关字段,即两个数据库表之间的类别 ID。

此外,使用准备好的语句来参数化查询。注意准备好的语句位于循环外,只有值在循环中迭代绑定

$query2 = "UPDATE performance_engine_sysaidstat_dino
           SET points_cat_count = ? WHERE points_cat_id = ?";

while ($row = mssql_fetch_array($result)) {    
   echo $row['count'] . "<br />";

   $stmt = $mysqli->prepare(query2);
   // ASSUMES COUNT IS STR AND CATEGORY IS INT
   $stmt->bind_param('si', $row['count'], $row['category'])    
   $stmt->execute();

}

$stmt->close();
$mysqli->close();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将MS SQL SERVER数据库导出到MySql数据库的最简单方法

来自分类Dev

将MS Access数据查询转换为SQL Server数据库查询

来自分类Dev

将MS Access数据查询转换为SQL Server数据库查询

来自分类Dev

MS Access数据库SQL查询

来自分类Dev

将MS SQL数据库反向工程到ERD

来自分类Dev

将Android应用连接到MS SQL数据库

来自分类Dev

将Excel记录插入MS SQL数据库

来自分类Dev

从MS SQL Server插入MySQL数据库

来自分类Dev

从MS SQL Server插入MySQL数据库

来自分类Dev

通过ssh使用Workbench迁移向导将MS SQL Server数据库迁移到MySQL

来自分类Dev

如何将数据从本地SQL Server数据库更新到联机SQL Server数据库?

来自分类Dev

将mysql查询转换为MS SQL

来自分类Dev

将数据从MS SQL移至MySQL

来自分类Dev

使用sql子查询更新mysql数据库

来自分类Dev

优化大型数据库的MS SQL选择查询

来自分类Dev

MS Access数据库中的SQL查询错误

来自分类Dev

改善ms sql中的数据库查询

来自分类Dev

如何使用django将数据更新到sql数据库中的表中

来自分类Dev

使用PHP将多个HTML字段更新到MySQL数据库

来自分类Dev

将复选框更新到mysql数据库中

来自分类Dev

将信息更新到 MySQL 数据库中,但每个员工的部门保持不变

来自分类Dev

SQL查询将数据插入数据库

来自分类Dev

将数据从MS-Access传输到MySql数据库的最佳方法

来自分类Dev

为什么将信息从 Java 代码更新到 SQL 数据库时出现错误?

来自分类Dev

从链接服务器(mysql)更新到本地sql数据库。

来自分类Dev

将MS SQL数据库连接到Railo数据源

来自分类Dev

使用SQL将数据插入MS Access数据库表

来自分类Dev

ODBC / MYSQL将查询结果从ODBC插入到MYSQL中的数据库

来自分类Dev

将“ SQL查询文本”存储在数据库中

Related 相关文章

  1. 1

    将MS SQL SERVER数据库导出到MySql数据库的最简单方法

  2. 2

    将MS Access数据查询转换为SQL Server数据库查询

  3. 3

    将MS Access数据查询转换为SQL Server数据库查询

  4. 4

    MS Access数据库SQL查询

  5. 5

    将MS SQL数据库反向工程到ERD

  6. 6

    将Android应用连接到MS SQL数据库

  7. 7

    将Excel记录插入MS SQL数据库

  8. 8

    从MS SQL Server插入MySQL数据库

  9. 9

    从MS SQL Server插入MySQL数据库

  10. 10

    通过ssh使用Workbench迁移向导将MS SQL Server数据库迁移到MySQL

  11. 11

    如何将数据从本地SQL Server数据库更新到联机SQL Server数据库?

  12. 12

    将mysql查询转换为MS SQL

  13. 13

    将数据从MS SQL移至MySQL

  14. 14

    使用sql子查询更新mysql数据库

  15. 15

    优化大型数据库的MS SQL选择查询

  16. 16

    MS Access数据库中的SQL查询错误

  17. 17

    改善ms sql中的数据库查询

  18. 18

    如何使用django将数据更新到sql数据库中的表中

  19. 19

    使用PHP将多个HTML字段更新到MySQL数据库

  20. 20

    将复选框更新到mysql数据库中

  21. 21

    将信息更新到 MySQL 数据库中,但每个员工的部门保持不变

  22. 22

    SQL查询将数据插入数据库

  23. 23

    将数据从MS-Access传输到MySql数据库的最佳方法

  24. 24

    为什么将信息从 Java 代码更新到 SQL 数据库时出现错误?

  25. 25

    从链接服务器(mysql)更新到本地sql数据库。

  26. 26

    将MS SQL数据库连接到Railo数据源

  27. 27

    使用SQL将数据插入MS Access数据库表

  28. 28

    ODBC / MYSQL将查询结果从ODBC插入到MYSQL中的数据库

  29. 29

    将“ SQL查询文本”存储在数据库中

热门标签

归档