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-&gt;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 到数组末尾 它永远不会适用于多个值。您不能将 mysql insert into (...) values (...),(...),(...) 扩展插入语法与准备好的语句一起使用,除非您在扩展列表中为 EVERY 值放置一个占位符 - 然后否定准备语句的意义。您需要将语句准备一次,然后对每组值执行多次。 性能明智的做法是改变任何事情。我正在从 mysql_query 转移到 PDO,似乎我无法做我以前做过的事情

以上是关于PDO json插入多个标签的主要内容,如果未能解决你的问题,请参考以下文章

插入带有多个标签的 InfluxDB 时“缺少标签键”

如何在 HTML 脚本标签中插入任意 JSON

pdo 并插入 json 编码到 json 字段

使用 PDO 将 JSON 解码数据插入 mysql

怎样在HTML中有效地插入多个JAVASCRIPT标签?

如何使用 PHP PDO 在 mySQL 中插入多行 JSON 对象数据?