INSERT INTO的SQL语法错误

时间:2014-05-01 13:01:47

标签: php mysql sql

我正在尝试将数据插入到包含19列的MySQL表中,但并不存储所有行。

只存储了几行,我收到了错误消息:

  

SQL语法中存在错误。检查SQL版本的语法。

虽然当我回应变量时,它们工作正常。

我的代码如下:

$sql="CREATE TABLE tb(tb1 VARCHAR(50),tb2 VARCHAR(50),tb3 VARCHAR(100),tb4 VARCHAR(100),tb5 VARCHAR(100),tb6 
VARCHAR(100),tb7 VARCHAR(100),tb8 VARCHAR(100),tb9 VARCHAR(100),tb10 VARCHAR(100),tb11 VARCHAR(100),tb12 
VARCHAR(100),tb13 VARCHAR(100),tb14 VARCHAR(100),tb15 VARCHAR(100),tb16 VARCHAR(100),tb17 VARCHAR(100),tb18 
VARCHAR(100),tb19 VARCHAR(100))";

foreach ($xml->product as $character) 
{
    $a1=$character->category->primary;
    $b2=$character->category->secondary;
    $c3=$character->URl->product;
    $d4=$character->URL->productImage;
    $e5=$character->URL->buy; 
    $f6=$character->description->short;
    $g7=$character->description->long;
    $h8=$character->discount->amount;
    $i9=$character->discount->time;
    $j10=$character->price->sale;
    $k11=$character->price->retail;
    $l12=$character->brand;
    $m13=$character->shipping->cost->amount;
    $n14=$character->shipping->cost->currency;
    $o15=$character->shipping->information;
    $p16=$character->shipping->availability;
    $q17=$character->keywords;
    $r18=$character->upc;
    $s19=$character->m1;

    $sql="INSERT INTO tb
    (tb1,tb2,tb3,tb4,tb5,tb6,tb7,tb8,tb9,tb10,tb11,tb12,tb13,tb14,tb15,tb16,tb17,tb18,tb19) VALUES
    ('$a1','$b2','$c3','$d4','$e5','$f6','$g7','$h8','$i9','$j10','$k11','$l12','$m13','$n14','$o15','$p16','$q17','$r18','$s19')";
    mysql_query($sql,$conn);
}

2 个答案:

答案 0 :(得分:1)

如果您的任何值包含撇号,则查询会中断。

在每个值周围使用mysql_real_escape_string()作为快速修复。

更正确且面向未来的解决方案是停止使用mysql_*函数,而是开始使用PDO,利用预处理语句等功能,因为这些功能可以帮助您逃避。

答案 1 :(得分:0)

这是一种格式化的评论。此类查询的一个常见错误是字段数与值的数量不匹配。如果您按以下方式键入查询,则更容易排除故障:

insert into table (
field1
, field2
, etc
)
values (
value1
, value2
, etc
)

此格式可以更轻松地计算字段和值的数量。有时候问题出在某个领域或价值上。这种格式(在行的开头用逗号)可以更容易地注释掉代码块以隔离问题。

相关问题