首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于向表插入记录的PDO错误代码1060重复列名

用于向表插入记录的PDO错误代码1060重复列名
EN

Stack Overflow用户
提问于 2021-03-03 18:18:23
回答 1查看 395关注 0票数 0

我尝试使用PDO将记录插入到表中,但它总是返回错误错误:数组( => 42S21 1 => 1060 2 =>重复列名'‘)

有时插入得很完美。我不明白为什么会这样。

代码语言:javascript
运行
复制
         $data=array(
            ':business_title' =>$title , 
            ':business_cover' => $cover, 
            ':business_logo' => $logo, 
            ':business_location'=>$location,
            ':business_address' =>$address, 
            ':business_contact' =>$phone , 
            ':business_email' =>$email , 
            ':business_url' =>$website ,
            ':business_category' =>$category ,
            ':business_subcategory' =>$subcategory ,
            ':business_keywords' =>$keywords ,
            ':business_full_desc' => $summary, 
            ':business_amenities' => $amenities,
            ':business_socialurl' => $socialurl,
            ':business_token' => $token,
            ':user_id' => $userid
          );
      $query = "
      INSERT INTO tablename
      (business_title,business_cover,business_logo,business_location,business_address,business_contact,business_email,business_url,business_category,business_subcategory,business_keywords,business_full_desc,business_amenities, business_socialurl,business_token, user_id)
      SELECT * FROM (SELECT :business_title,:business_cover,:business_logo,:business_location,:business_address,:business_contact,:business_email,:business_url,:business_category,:business_subcategory,:business_keywords,:business_full_desc,:business_amenities, :business_socialurl,:business_token, :user_id) AS tmp
      WHERE NOT EXISTS (
          SELECT user_id FROM tablename WHERE user_id = :user_id
      ) LIMIT 1
      ";
EN

回答 1

Stack Overflow用户

发布于 2021-03-03 23:47:30

当您在输入数据中得到重复的值时,您的问题就会发生。当您SELECT一组常量值时,MySQL会自动生成与这些值匹配的列名。例如:

代码语言:javascript
运行
复制
SELECT 'a', 'b', 'c'

得出的结果:

代码语言:javascript
运行
复制
a   b   c
---------
a   b   c

现在如果你

代码语言:javascript
运行
复制
SELECT 'a', 'b', 'b'

你会得到

代码语言:javascript
运行
复制
a   b   b
---------
a   b   b

因此,如果您随后尝试

代码语言:javascript
运行
复制
SELECT * FROM (SELECT 'a', 'b', 'b') AS tmp;

您将得到一个重复的列错误,因为子查询的结果集中有两个名为b的列。

您可以通过提供值列别名来解决这一问题,例如:

代码语言:javascript
运行
复制
SELECT * FROM (SELECT 'a' AS a, 'b' AS b, 'b' AS c) AS tmp;

输出:

代码语言:javascript
运行
复制
a   b   c
a   b   b

dbfiddle演示

请注意,尚不清楚您是否需要所拥有的查询的复杂性,您应该能够简单地:

代码语言:javascript
运行
复制
INSERT INTO tablename (business_title,business_cover,business_logo,business_location,business_address,business_contact,business_email,business_url,business_category,business_subcategory,business_keywords,business_full_desc,business_amenities, business_socialurl,business_token, user_id)
SELECT :business_title,:business_cover,:business_logo,:business_location,:business_address,:business_contact,:business_email,:business_url,:business_category,:business_subcategory,:business_keywords,:business_full_desc,:business_amenities, :business_socialurl,:business_token, :user_id
WHERE NOT EXISTS (
    SELECT * FROM tablename WHERE user_id = :user_id
)

例如,参见这个演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66462683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档