我手头上有一个很难的: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
所有记录,并使用*
更新它们,因为记录为inserted
或updated
。
我更改了检查代码以包含:
$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中已经改变了。
感谢您的尝试...
答案 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
的连接填充了该字段。
在第二轮中,我检查了现有的INDEX
空UPDATED
字段。
最后,它按预期工作!!!!!!!