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

标签 mysql insert integer tinyint

我正在努力从 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 的有效整数。

要做什么?

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

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

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

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

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

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

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

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

编辑:哦,我现在明白了。您的 leafCategory 项不是 XML 中的数字,而是 true/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/

相关文章:

php - 我可以在数据库中选择 1 行以上具有不同标识符的行吗?

javascript - 如何使用我自己的所见即所得编辑器插入图像

java - 向包含外键的mysql表插入数据出现错误

java - 对 2D Java 数组中的整数值进行分组以及相关值的求和

php - 在自定义数据库中存储用户数据

MySQL 选择,用分隔符连接

mysql - 从表中获取自身的交集

PHP 代码看起来不错,但没有更新

php - 带有 Doctrine 和 PHP 的 8 字节整数

java - 从 Java Integer 到 Scala Int : toInt vs unbox? 的正确方法