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

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

MySQL插入不顯示任何內(nèi)容

MySQL插入不顯示任何內(nèi)容

PHP
躍然一笑 2022-01-24 09:25:25
    如何使數(shù)據(jù)庫條目代碼起作用?現(xiàn)在,當我運行此代碼時,什么都沒有顯示。 public function hookActionValidateOrder()    {                $products=[];          $ids_product_attribute=[];         $references=[];         $stocks= [];           for($i=0;Context::getContext()->cart->getProducts()[$i]['id_product'];$i++)           {                array_push($products,Context::getContext()->cart->getProducts()[$i]['id_product']);                array_push($ids_product_attribute,Context::getContext()->cart->getProducts()[$i]['id_product_attribute']);                array_push($references,Context::getContext()->cart->getProducts()[$i]['reference']);                array_push($stocks,Context::getContext()->cart->getProducts()[$i]['stock_quantity']);                die(Db::getInstance()->execute("                INSERT INTO cart_log (products, ids_product_attribute, references, stocks, time)                VALUES ($products[$i], $ids_product_attribute[$i], $references[$i], $stocks[$i])"));           }        //    var_dump($products);        //    var_dump($ids_product_attribute);        //    var_dump($references);        //    var_dump($products);    }
查看完整描述

2 回答

?
智慧大石

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

我在您的查詢中檢測到兩個錯誤:

  1. 您插入 5 個字段,但只有 4 個值。

  2. 在值中,如果值字符串,則不添加 '' char

示例:如果所有數(shù)據(jù)類型為字符串的字段

VALUES ('$products[$i]', '$ids_product_attribute[$i]', '$references[$i]', '$stocks[$i]', 'Field 5')



查看完整回答
反對 回復(fù) 2022-01-24
?
胡說叔叔

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

我會這樣寫這個函數(shù):


public function hookActionValidateOrder()

{

    $defaults = [

      'id_product' => null,

      'id_product_attribute' => null,

      'reference' => 0,

      'stock_quantity' => 0

    ];

    $stmt = Db::getInstance()->prepare("

        INSERT INTO cart_log

        SET products = :id_product,

            ids_product_attribute = :id_product_attribute,

            references = :reference,

            stocks = :stock_quantity");

    $products = Context::getContext()->cart->getProducts();

    foreach ($products as $product) {

        $values = array_merge($defaults, array_intersect_key($product, $defaults));

        $stmt->execute($values);

    }

}

此示例顯示了在準備好的語句中查詢參數(shù)的用法,因此您不要嘗試將 PHP 變量直接插入到 SQL 查詢中。查詢參數(shù)使編寫無錯誤的 SQL 代碼變得更加容易,并且它們可以保護您免受意外 SQL 注入錯誤(也包括惡意攻擊)的影響。


我建議您調(diào)用cart->getProducts()一次,并將結(jié)果保存在局部變量中。我不確定該函數(shù)的作用,但我想它正在運行另一個 SQL 查詢。您不應(yīng)該為每個循環(huán)多次運行相同的 SQL 查詢,這會增加數(shù)據(jù)庫服務(wù)器的負載。


要做的事情array_merge(array_intersect_key())是確保 values 數(shù)組具有所有需要的鍵,并且除了需要的鍵之外沒有其他鍵。然后它可以按原樣傳遞給PDOStatement::execute().


我正在使用MySQL 支持的INSERT 替代形式,使用SET column = value ...語法。我發(fā)現(xiàn)這可以更輕松地確保我已將一列與每個值匹配,反之亦然。


正如上面評論中提到的,您必須在數(shù)據(jù)庫連接器中啟用異常。我假設(shè)您的getInstance()函數(shù)返回一個 PDO 連接,因此您可以將參數(shù)數(shù)組傳遞給execute(). 您需要按照此處所述啟用 PDO 異常:https ://www.php.net/manual/en/pdo.error-handling.php


如果您不啟用異常,則應(yīng)檢查 和 的返回值prepare()是否為 ,execute()如果是=== false,則記錄errorInfo()(閱讀我鏈接到的關(guān)于錯誤處理的 PHP 文檔)。


查看完整回答
反對 回復(fù) 2022-01-24
  • 2 回答
  • 0 關(guān)注
  • 250 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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