我正在尝试将数据插入到包含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);
}
答案 0 :(得分:1)
如果您的任何值包含撇号,则查询会中断。
在每个值周围使用mysql_real_escape_string()
作为快速修复。
更正确且面向未来的解决方案是停止使用mysql_*
函数,而是开始使用PDO,利用预处理语句等功能,因为这些功能可以帮助您逃避。
答案 1 :(得分:0)
这是一种格式化的评论。此类查询的一个常见错误是字段数与值的数量不匹配。如果您按以下方式键入查询,则更容易排除故障:
insert into table (
field1
, field2
, etc
)
values (
value1
, value2
, etc
)
此格式可以更轻松地计算字段和值的数量。有时候问题出在某个领域或价值上。这种格式(在行的开头用逗号)可以更容易地注释掉代码块以隔离问题。