mysqli无法找到现有记录

时间:2017-12-11 13:19:16

标签: php mysqli

我手头上有一个很难的:mysqli无法找到[某些]现有记录。任何帮助将不胜感激。

例证: 我截断表(清空);

首次运行时,我会从文本文件中填入2,495条记录。 只是为了确保事情是正确的(因为我验证了不一致),我重新运行相同的文件输入。 12(始终相同的12)记录无法找到并重新插入而不是更新。 我检查了文件并在文本版本上手动重新输入。

错误仍然存​​在:第二次运行时,有2,508条记录,当然还有12条重复记录。

代码:

$result = $DB->query("SELECT * FROM `inventory-temp` WHERE MFR='".$MFR."' AND SKU='".$SKU."'");

        $upd = false;
        if ($result->num_rows > 0) {
            if (($result->row['MFR'] == $MFR) && ($result->row['SKU'] == $SKU)) {
                $upd = true;
            }
            unset($result);
        }
        if ($upd) {
            $DB->query($update);
            echo $i, ' = Record updated! <br />';
        } else {
            $DB->query($insert);
            echo $i, ' = New record created! <br />';
        }

我认为问题是num_rows回归;所以我在if语句中重新检查。 问题还在继续,所以我添加unset试图看看它是否与面包屑有关。

我也试过->real_query。没有变化。我可能会丢失什么?

  

更新:这真的让我伤心!

在&#39;隐形&#39;性格,这是不行的。我用手替换了原始记录(在xls文件中);重新导出为CSV;并重新尝试了几次。仍然是同样的问题。

我没有告知我有一个UPDATED字段CHAR长度为1字符。在我批量处理更新之前,我会清除FLAG所有记录,并使用*更新它们,因为记录为insertedupdated

我更改了检查代码以包含:

$result = $DB->query("SELECT * FROM `inventory-temp` WHERE MFR='".$MFR."' AND SKU='".$SKU."' AND UPDATED=' '");

仍然无法找到existing条记录。

甚至更有趣(不是真的)是当我在视觉上检查表时,原始记录和重复记录都有带有*的UPDATED字段。

现在是踢球者:

在插入或更新记录时,我会回显记录编号(序列号)和MFR只是为了一些视觉辅助。

在第二次运行中,我得到12(总是相同的)Record inserted而不是Record updated

当我返回相应line number的XLS文件时,插入的记录不是列出的一个;但对于具有相同MFR的其他SKU类似的。

请注意THIS MFR的长度为4个字符。重复的长度为11个字符。

非常令人费解....

这些字段分别具有CHAR 15和CHAR 20.对于测试,我将它们更改为TinyText。问题仍然存在。非常奇怪....

  

更新(2)

:我继续前进,而不是csv输入,我创建了一个由TAB分隔的纯文本文件; a.k.a. chr(9)。多次重播所有内容。

===&GT;问题依然存在。

&#34;当一切都失败时,显而易见的是......&#34;

好的,我将为测试删除MFR的所有记录并重新运行所有内容。

  

更新3:

好的,尝试解决这个难题,我继续通过添加或删除aaaa之类的字符来改变这两列(每个列表)的长度 它们高达列宽(15个字符)。 没有任何效果。我为两个罪犯MFR 1和2做了那个。 没有解决方案。

我们的想法是,在转储CSV文件替换表格内容时,只需更新修改后的记录而不是整个表格,即可实时更新库存文件,而不是在下班后。

哦,好吧,现在它将在下班后。如果我遇到解决方案,我会在这里发布。

我只是想知道&#39; i&#39;在MySQL中已经改变了。

感谢您的尝试...

2 个答案:

答案 0 :(得分:0)

使用query()返回结果对象,并尝试从此结果中获取实际数据。

if ($result->num_rows > 0) {
       $row = $result->fetch_assoc();
       if (($row['MFR'] == $MFR) && ($row['SKU'] == $SKU)) {
           $upd = true;
       }
}

或者 - 正如指出您的查询已经在检查数据,您可以将其简化为...

if ($result->num_rows > 0) {
   $upd = true;
}

通过将检查放在后面的if ...

,这也可以缩短代码
if ($result->num_rows > 0) {
    $DB->query($update);
    echo $i, ' = Record updated! <br />';
} else {
    $DB->query($insert);
    echo $i, ' = New record created! <br />';
}

答案 1 :(得分:0)

  

问题解决了

(我不相信我应该这样做):

按照建议,使MFR+SKU表键不能按我想要的方式工作。会抛出致命的错误(也许我没有正确处理它)。

我在表格的开头创建了一个名为INDEX的新字段,并在第一个过程中使用trimmed MFR+SKU的连接填充了该字段。

在第二轮中,我检查了现有的INDEXUPDATED字段。

最后,它按预期工作!!!!!!!