为了账号安全,请及时绑定邮箱和手机立即绑定

Mysql SELECT函数在字段列表中返回未知列错误

Mysql SELECT函数在字段列表中返回未知列错误

PHP
慕慕森 2022-01-24 13:16:49
有这段代码,但我无法弄清楚代码中的错误,因为它似乎是我完美编写的。这是代码...function add_product_to_cart($pdo, $table, $cart_id, $product_id, $attributes){    $parameters = [':product_id' => $product_id, ':attributes' => $attributes];    #$addProduct = ' DECLARE productQuantity INT; ';    #$addProduct = 'SELECT @cart := ' . $cart_id;    $addProduct = 'SET @cart := ' . $cart_id . ';';    $addProduct .= 'SELECT  * FROM `' . $table . '` WHERE cart_id = @cart AND product_id = :product_id';    $addProduct .= ' AND attributes = :attributes ';    $addProduct .= 'IF @cart IS NULL THEN INSERT INTO `' . $table . '`(';    $addProduct .= 'cart_id, product_id, attributes, quantity, added_on) VALUES (';    $addProduct .= '@cart, :product_id, :attributes, 1, 1, NOW())';    $addProduct .= ' ELSE UPDATE `' . $table . '` SET quantity = quantity + 1, buy_now = true WHERE cart_id = @cart';    $addProduct .= ' AND product_id = :product_id AND attributes = :attributes';    query($pdo, $addProduct, $parameters);    return $query;}这就是错误无法连接到数据库服务器:SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列'3ab31dbf3ced5f2c4df0b739e740110f'我想要做的实际上是检查 cart_id 是否保存在数据库中,如果保存,则更新数据库中的 quqntity,如果没有将其插入数据库。它抱怨的未知列是值,要搜索的列是 cart_id
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

正如Nigel Ren所说,这是利用MySQLINSERT ... ON DUPLICATE KEYS语法的好地方。


为此,您只需要在 columns 上创建一个唯一约束(cart_id, product_id)。


ALTER TABLE mytable ADD CONSTRAINT my_table_constraint UNIQUE (cart_id, product_id);

请注意,要创建约束,现有数据必须符合要求(即,如果表中已有重复数据,则无法创建,需要先将其删除)。


现在,您可以使用以下查询简化整个代码:


INSERT INTO mytable

    (cart_id, product_id, attributes, quantity, added_on) 

    VALUES (:cart, :product_id, :attributes, 1, 1, NOW())

ON DUPLICATE KEYS UPDATE quantity = quantity + 1, buy_now = true 

如果您尝试在已经存在的(cart_id, product_id)元组上插入,那么 MySQL 会自动跳过插入并执行ON DUPLICATE KEYS子句中描述的更新命令。


除了使您的代码更短更简单之外,这种语法的另一个好处是可以有效地保护您免受竞争条件的影响:使用您现有的代码,两个同时运行的进程总是有可能插入重复的记录,而当使用上述,数据完整性由 MySQL 保证。


唯一的缺点是约束适用于对表执行的所有操作,它没有本地化到代码的特定部分。


查看完整回答
反对 回复 2022-01-24
  • 1 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信