gpt4 book ai didi

MySQL、XML bool 值和整数 : Incorrect integer value:

转载 作者:行者123 更新时间:2023-11-29 02:30:51 24 4
gpt4 key购买 nike

我正致力于从 ebay 抓取 xml 数据并将结果放入 MySQL,抓取数据工作正常,但是由于几个 xml 标签值的整数值不正确,输入数据库失败。

xml 标记值是单词“true”(不带引号),这是 db sql:

CREATE TABLE ebay_categories (
CategoryID int(10) NOT NULL default '0',
CategoryLevel int(5) NOT NULL default '0',
CategoryName varchar(120) NOT NULL default '',
CategoryParentID int(10) NOT NULL default '0',
LeafCategory int(1) NOT NULL default '0',
AutoPayEnabled int(1) NOT NULL default '0',
Expired int(1) NOT NULL default '0',
IntlAutosFixedCat int(1) NOT NULL default '0',
Virtual int(1) NOT NULL default '0',
LSD int(1) NOT NULL default '0',
ORPA int(1) NOT NULL default '0',
PRIMARY KEY (CategoryID),
KEY catlevel (CategoryLevel),
KEY parent (CategoryParentID),
KEY ape (AutoPayEnabled),
KEY expired (Expired),
KEY IAFC (IntlAutosFixedCat),
KEY virtual (Virtual),
KEY lsd (LSD),
KEY orpa (ORPA),
KEY leaf (LeafCategory)
) TYPE=MyISAM;

我已经尝试了 int、tinyint、Boolean(求助于 tinyint)都无济于事,但仍然遇到这个问题。数据库连接没有任何问题,因为我使用 varchar 作为 LeafCategory 和其他类型的 int 类型进行了测试,一切正常。

有什么我可以做的,而无需在数据库插入之前通过正则表达式进行搜索和替换吗?

编辑:

    $query = "INSERT INTO `ebay_categories` (`CategoryID`, `LeafCategory`)VALUES           ('$xmlCategoryID', '$xmlLeafCategory')";

if (mysqli_query($link, $query)) {
echo "Successfully inserted " . mysqli_affected_rows($link) . " row";
} else {
echo "Error occurred: " . mysqli_error($link);
}

从客户端代码中解包的 SQL 语句是:

    INSERT INTO `ebay_categories` 
(`CategoryID`, `LeafCategory`)
VALUES
('$xmlCategoryID', '$xmlLeafCategory')";

最佳答案

您遇到的错误是告诉您 XML 中至少有一条记录包含 $xmlCategoryID 或 $xmlLeafCategory 的有效整数以外的内容。

怎么办?

一个。您可以让错误消息显示有问题的数据,如下所示:

  echo "Error occurred: " . mysqli_error($link);
echo "Bad data was either ##$xmlCategoryID## or ##$xmlLeafCategory##.";

请注意,我使用了##$value##,因此您可以在错误消息中检测到空字符串。您可能应该这样做。

B.您可以尝试更改这些列的列定义以删除 NOT NULL 声明。如果实际上其中一个值是空的,这可能会解决您的问题。

C.您可能需要此信息的 bigint 值。也就是说,它们可能是非常大的数字。

D.如果您不太关心 null 或坏值而懒得去检测它们,您可以试试这个。

INSERT INTO `ebay_categories` 
(`CategoryID`, `LeafCategory`)
VALUES
(CAST(IFNULL('$xmlCategoryID',-1) AS INT)
(CAST(IFNULL('$xmlLeafCategory',-1) AS INT)

这会将空值变为 -1,将非整数值变为 0。

编辑:哦,我现在明白了。您的 leafCategory 项目不是 XML 中的数字,它是真/假/空值。大概 false 和 empty 是同一个意思。

试试这个,使用 SQL case 语句将 true/other 转换为 1/0。

INSERT INTO `ebay_categories` 
(`CategoryID`, `LeafCategory`)
VALUES (
'$xmlCategoryID',
CASE '$xmlLeafCategory' WHEN 'true' THEN 1 ELSE 0 END
)

最后,危险!您需要使用准备好的语句,并且需要清理从 XML 文件中提取的这些值。如果您不这样做,那么有人将能够通过向您的软件提供一个有毒的 XML 文件来欺骗您的软件破坏您的数据库。请阅读 SQL 注入(inject)。

关于MySQL、XML bool 值和整数 : Incorrect integer value:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13399004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com