第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mysql SELECT函數(shù)在字段列表中返回未知列錯誤

Mysql SELECT函數(shù)在字段列表中返回未知列錯誤

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;}這就是錯誤無法連接到數(shù)據(jù)庫服務器:SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列'3ab31dbf3ced5f2c4df0b739e740110f'我想要做的實際上是檢查 cart_id 是否保存在數(shù)據(jù)庫中,如果保存,則更新數(shù)據(jù)庫中的 quqntity,如果沒有將其插入數(shù)據(jù)庫。它抱怨的未知列是值,要搜索的列是 cart_id
查看完整描述

1 回答

?
HUWWW

TA貢獻1874條經(jīng)驗 獲得超12個贊

正如Nigel Ren所說,這是利用MySQLINSERT ... ON DUPLICATE KEYS語法的好地方。


為此,您只需要在 columns 上創(chuàng)建一個唯一約束(cart_id, product_id)。


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

請注意,要創(chuàng)建約束,現(xiàn)有數(shù)據(jù)必須符合要求(即,如果表中已有重復數(shù)據(jù),則無法創(chuàng)建,需要先將其刪除)。


現(xiàn)在,您可以使用以下查詢簡化整個代碼:


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 

如果您嘗試在已經(jīng)存在的(cart_id, product_id)元組上插入,那么 MySQL 會自動跳過插入并執(zhí)行ON DUPLICATE KEYS子句中描述的更新命令。


除了使您的代碼更短更簡單之外,這種語法的另一個好處是可以有效地保護您免受競爭條件的影響:使用您現(xiàn)有的代碼,兩個同時運行的進程總是有可能插入重復的記錄,而當使用上述,數(shù)據(jù)完整性由 MySQL 保證。


唯一的缺點是約束適用于對表執(zhí)行的所有操作,它沒有本地化到代碼的特定部分。


查看完整回答
反對 回復 2022-01-24
  • 1 回答
  • 0 關注
  • 215 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號