Php 如何解决;非法双。。。在分析过程中找到值";在mysql插件上?

Php 如何解决;非法双。。。在分析过程中找到值";在mysql插件上?,php,mysql,sql,Php,Mysql,Sql,大约一年来,我一直使用php页面将ebay订单从csv文件导入mysql数据库。以下是我的查询的外观: "INSERT INTO orders VALUES (0, {$fname}, {$lname}, {$address1}, {$address2}, {$town}, {$county}, {$postcode}, {$country}, {$tel}, {$email}, '', {$postage}, {$subtotal}, {$total}, {$basket},'', 'eBa

大约一年来,我一直使用php页面将ebay订单从csv文件导入mysql数据库。以下是我的查询的外观:

 "INSERT INTO orders VALUES (0, {$fname}, {$lname}, {$address1}, {$address2}, {$town}, {$county}, {$postcode}, {$country}, {$tel}, {$email}, '', {$postage}, {$subtotal}, {$total}, {$basket},'', 'eBay', now(), 'GBP', 'paypal', 1, '', 1, {$txnId}) ON DUPLICATE KEY UPDATE txnid=txnid, complete=complete, new=new, time=time;";
上周,我开始在一些订单行上收到错误“在解析过程中发现非法的double(txnId varchar)值”,它阻止我进一步导入订单

我读过一些建议,认为这是因为$txnId的值没有正确分隔。我尝试将其更改为
'{$txnId}'
\'{$txnId}\'
,这两种方法都有效,但在这两种情况下,都会导致无问题订单的txnId前缀为“”


有谁能帮我找到一种方法来修改我的查询,这样我就不会在某些订单上再收到这个错误了?另外,作为奖励,任何人都可以向我解释这个错误消息的确切含义,以及为什么它只影响某些订单,因为我想了解这个问题并解决它。

变量中的“E”可能会让系统误以为它是一个双值,因为双值可以表示为类似于“7.012E-5”的东西

看起来MySQL正在将
$txnId
解释为一个双精度(它可能有一个小写)。对于语句中的所有不带引号的字符串,我很惊讶它居然可以工作。刚刚检查过,它们有一个大写的E。你能解释一下为什么这会导致该值作为双精度传递吗?这就是为什么用PDO之类的东西编写预备语句非常有价值的原因之一。它不仅可以缓解这个问题,而且还可能大大加快插入速度。在插入$txnId varchar之前,如何对其进行消毒?如果它包含E,我尝试将其用引号括起来。但是有很多包含E的条目不作为双精度解析,它们最后被输入到表中,前面有“”,这会导致我以后处理数据时出现问题。我认为“{$txnId}”应该起作用,但我不明白为什么它会在字段前面加上前缀“”。你能给我一个有问题的数据值和没有问题的数据值的例子吗?当然
6L831105EP011602
71V72876YH791094
解析精细,但
546635980E5898057
解析为双精度。如果您需要,我可以稍后提供更多。我已尝试将这些示例数据插入测试数据库,但我无法让“{$txnId}”在任何数据值(即使是空值)上加前缀。当我取出字符串分隔符时,我确实收到了关于双精度值的投诉。