仅限 pSQL 数组字段

Posted

技术标签:

【中文标题】仅限 pSQL 数组字段【英文标题】:pSQL array field only 【发布时间】:2021-12-01 18:52:13 【问题描述】:

我正在尝试插入一个大数组,但由于单引号“'”导致其中一个字段 (product_name) 中断。

如何在将数组插入数据库之前只 pSQL 仅 product_name 字段?

这就是我的数据库的样子(它是一个 prestashop order_detail 表)

[75] => Array
    (
        [id_order_detail] => 76
        [id_order] => 23
        [id_order_invoice] => 13
        [id_warehouse] => 0
        [id_shop] => 1
        [product_id] => 5191
        [product_attribute_id] => 0
        [id_parent] => 5191
        [parent_reference] => 0
        [item_position] => 0
        [product_name] => AMIX MR POPPER'S NOCAMIX WHITE CHOCO CREAM 275G
        [product_quantity] => 1
        [product_quantity_in_stock] => 1
        [product_quantity_refunded] => 0
        [product_quantity_return] => 0
        [product_quantity_reinjected] => 0
        [product_price] => 8.363636
        [reduction_percent] => 10.00
        [reduction_amount] => 0.000000
        [reduction_amount_tax_incl] => 0.000000
        [reduction_amount_tax_excl] => 0.000000
        [group_reduction] => 0.00
        [product_quantity_discount] => 9.380000
        [product_ean13] => 
        [product_upc] => 647
        [product_reference] => L655
        [product_supplier_reference] => 
        [product_weight] => 0.000000
        [tax_computation_method] => 0
        [tax_name] => 
        [tax_rate] => 0.000
        [ecotax] => 0.000000
        [ecotax_tax_rate] => 0.000
        [discount_quantity_applied] => 0
        [download_hash] => 
        [download_nb] => 0
        [download_deadline] => 0000-00-00 00:00:00
        [total_price_tax_incl] => 8.280000
        [total_price_tax_excl] => 7.530000
        [unit_price_tax_incl] => 8.280000
        [unit_price_tax_excl] => 7.530000
        [total_shipping_price_tax_incl] => 0.000000
        [total_shipping_price_tax_excl] => 0.000000
        [purchase_supplier_price] => 5.150000
        [original_product_price] => 8.363636
        [original_wholesale_price] => 0.000000
    )

[76] => Array
    (

这就是我做插入的方式。

Db::getInstance()->insert('order_detail', $response);

虽然 $response 是整个数组。 如您所见,我是新手;任何帮助表示赞赏。

非常感谢!

【问题讨论】:

尝试在插入前用$response['product_name'] = pSQL($response['product_name']) 编辑$response 变量。 $response['product_name'] 不起作用,因为它是一个多维数组(我认为)。它抛出“注意:未定义的索引:id_order_detail”。执行 $response[0]['product_name'] 有效,但它只插入第一行。我认为我必须做一个 foreach 【参考方案1】:

您可以使用 Db::getInstance()->execute 编写整个查询,这样您就可以转义单个字段,或者您必须清理 $response 数组中的数据。

【讨论】:

【参考方案2】:

这是一个简单的技巧。有了这个功能,你就可以轻松搞定,而且在更多的情况下可以使用。

Db::getInstance()->insert('order_detail', mypSQL($response));

function mypSQL($var)

    if (is_array($var)) 
        foreach ($var as $key => $val) 
            $var[$key] = mypSQL($val);
        
     elseif (is_string($var)) 
        $var = pSQL($var);
    

    return $var;

【讨论】:

以上是关于仅限 pSQL 数组字段的主要内容,如果未能解决你的问题,请参考以下文章

在 psql 命令行上传递数组参数

在 psql 中创建“计数器”数组

查询jsonb PSQL中数组元素的where子句

javascript 将数字数组从重复项目减少到仅限唯一项目

MongoDB索引问题

创建新表与在 psql 中保留字段之间的区别