【问题标题】:Codeigniter and mariadb missing one rowCodeigniter 和 mariadb 缺少一行
【发布时间】:2017-01-20 22:19:19
【问题描述】:

我从 HANA DB 中选择了 2k 数据并将其插入 mariadb 10.1.19,但我一直缺少一行(不是第一行或最后一行)。

这是我的代码

function sync_supplier($user = null){
    ignore_user_abort(true);

    set_time_limit(0);
    $this->db->truncate('suppliers');

    $dbjpa = $this->load->database('jpa',TRUE);

    $field = '"CardCode","CardName","CardType","GroupCode","Phone1","CntctPrsn","City","E_Mail"';
    $where = "'Y'";

    $result = $dbjpa->query('SELECT '.$field.' FROM JAVAPRIMA_ADI."OCRD" WHERE "frozenFor" != '.$where);

    $resultSupplier = $result->result_array();

    $count = 0;
    foreach($resultSupplier as $supplier) { 
            $data = array(
                'CardCode'=> $supplier['CardCode'],
                'CardName'=> $supplier['CardName'],
                'CardType'=> $supplier['CardType'],
                'GroupCode'=> $supplier['GroupCode'],
                'Phone1'=> $supplier['Phone1'],
                'CntctPrsn'=> $supplier['CntctPrsn'],
                'City'=> $supplier['City'],
                'E_Mail'=> $supplier['E_Mail']
                );

            $this->db->insert('suppliers',$data);
            $count++;
    }

    if ($result->num_rows() > 0){
        echo "num_rows : ".$result->num_rows();
        echo "<br>count : $count";
        return true;
    }
    else {
        return false;
    }
}

这是结果(在此处发布了图像,但我被 2 个链接限制,所以我必须粘贴文本)

num_rows : 2827
count : 2827

这是 phpmyadmin 的计数

phpmyadmin

这是 HANA 计数

hana

谁能告诉我这里发生了什么?那是一个倒霉的供应商,可能不会拿回他的钱......

【问题讨论】:

  • 要写一个语句 INSERT INTO suppliers SELECT * FROM ocrd; 有很多代码。
  • @RickJames 这是不同服务器上的不同数据库(mariadb & sap hana),
  • 然后考虑 MariaDB Connect 或 FederatedX。

标签: mariadb codeigniter-3 php-7 hana


【解决方案1】:

作为一种快速调试方法...看来您的某一行可能导致问题并且没有被插入...

要快速测试这种情况,您可以对插入执行测试...插入的结果返回 True 或 False。因此,您可以尝试使用它...

替换

$this->db->insert('suppliers',$data);
$count++;

$count++;
if(! $this->db->insert('suppliers',$data)) {
  echo "The insert failed at count = $count <br>"; 
  // instead of the above echo use the var_dump or print_r
  // or use both for fun, but the var_dump is more useful!
  var_dump($data); // This is probably more useful
}

这只是检查插入的结果并采取一些行动。你甚至可以放一个 exit();在这里只是为了找到有问题的行,如果有的话。

是的,还有其他方法可以做到这一点,但这会指出“可能”出了什么问题。

您还可以实现其他一些东西,但这是一个快速的“仅调试检查”,只是为了让您了解可能出现的问题。

【讨论】:

  • 感谢 TimBrownlaw。我找到了导致问题的原因。
  • 我很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多