PDO json插入多个标签
Posted
技术标签:
【中文标题】PDO json插入多个标签【英文标题】:PDO json insert multiple tags 【发布时间】:2014-01-30 18:43:44 【问题描述】:我一直在尝试使用 pdo 向表格中插入一些标签,但无济于事。
我有一个名为 Tag 的 php 数组。
标签数组中的样本数据如下
tag[] = [[a,b,c,d,e],[f,g,h,i,j]]
使用下面的 for 循环,我可以将其转换为 (1,'a','b','c','e',0), (1,'f','g',' h','i',0)
$value="";
$value .= "($postid,";
for($i=0;$i<sizeof($tag);$i++)
$value .="'$tag[$i]'";
if($i + 1 == $sizeof($tag)
$value .=")";
else
$value .="),";
并按如下方式准备并插入到表中
$inserttagquery = "insert Into tagtable ( postid, desc, b, u, toppos,leftpos ,ver) values :value";
$queryinserttag = $conn->prepare($inserttagquery);
$queryinserttag->execute(array('value'=>$value));
$insertedtag = $queryinserttag->rowCount();
但是,这似乎不起作用。 $insertedtag 不返回任何值。
【问题讨论】:
PDOStatement->errorCode()
有输出吗?您是否回显您的查询并检查它是否有错误?如果查询成功,execute()
也会返回一个布尔值
专业提示:sizeof
是真男人使用count
的别名。
【参考方案1】:
您的 SQL 完全错误。您在字段列表中列出了 6 个字段AND一个常量值,然后仅提供一个 SINGLE 占位符来为这些字段提供值。
-
您不能使用数字作为字段名称。
0
是一个明确的语法错误和无效的字段名称。
占位符在字段和值之间具有 1:1 的关系。您不能将多个值放入一个变量中,并尝试使用该值和占位符来填写其他字段。
您的查询应该是:
INSERT INTO tagtable (postid, desc, b, u, etc...)
VALUES (:postid, :desc, :b, :u, etc...)
然后您为每个占位符提供单独的值:
$stmt->execute(array($postid, $desc, $b, $u, etc...));
如所写,忽略所有其他问题,您的查询将尝试将您的 (1, 'f', 'g', etc..)
字符串推入 JUST postid
字段。
【讨论】:
请看我的编辑。您的答案的问题是它不适用于多重价值。那是数组索引 0 到数组末尾 它永远不会适用于多个值。您不能将 mysqlinsert into (...) values (...),(...),(...)
扩展插入语法与准备好的语句一起使用,除非您在扩展列表中为 EVERY 值放置一个占位符 - 然后否定准备语句的意义。您需要将语句准备一次,然后对每组值执行多次。
性能明智的做法是改变任何事情。我正在从 mysql_query 转移到 PDO,似乎我无法做我以前做过的事情以上是关于PDO json插入多个标签的主要内容,如果未能解决你的问题,请参考以下文章