【问题标题】:PHP INSERT with array function带有数组函数的 PHP INSERT
【发布时间】:2021-05-23 17:15:29
【问题描述】:

我正在尝试使用数组键明智地在 PHP 中插入数据。如果数据是单个且没有数组,我知道如何插入数据函数。但这是一个问题首先出现在我开始 PHP 的时候。 我看过另一篇带有 `implode 函数的帖子,但我无法理解。

我正在尝试产品123456的数量是否会插入100,如果产品123654的数量将150和其他数据将不断插入。

数据库结构

---------------------------------------------------------------------------
| ID |  SKU    |   PRODUCT    |   QTY   |  SUBJECT          | ANY_COMMENT |
---------------------------------------------------------------------------
| 1  | 106101  |   123456     |   100   |  MY TEST SUBJECT  | MY_COMMENT  |
---------------------------------------------------------------------------
| 2  | 106101  |   123654     |   150   | MY TEST SUBJECT   | MY_COMMENT  |
---------------------------------------------------------------------------  

PHP 数组

Array
(
    [subject] => MY TEST SUBJECT
    [sku] => 106101
    [product] => Array
        (
            [0] => 123456
            [1] => 123654
        )

    [qty] => Array
        (
            [0] => 100
            [1] => 150
        )

    [comment] =>MY_COMMENT
)

PHP 代码

$stmt = $con->prepare("INSERT INTO `table` SET(`SKU`, `PRODUCT`, `QTY`, `SUBJECT`, `ANY_COMMENT`) VALUES(:sku, :product, :qty, :subject, :comment)");

$stmt->execute();

【问题讨论】:

    标签: php arrays pdo insert implode


    【解决方案1】:

    您可以通过为每个表格列绑定参数来做到这一点;分配常量值,然后在循环中迭代变化的值,使用一个数组中的键作为另一个数组的键,并在每次通过循环时执行语句。像这样的东西应该可以工作:

    // prepare statement
    $stmt = $con->prepare("
    INSERT INTO `table` (`SKU`, `PRODUCT`, `QTY`, `SUBJECT`, `ANY_COMMENT`) 
    VALUES(:sku, :product, :qty, :subject, :comment)
    ");
    
    // bind parameters
    $stmt->bindParam(':sku', $sku, PDO::PARAM_INT);
    $stmt->bindParam(':subject', $subject, PDO::PARAM_STR);
    $stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
    $stmt->bindParam(':product', $product, PDO::PARAM_INT);
    $stmt->bindParam(':qty', $qty, PDO::PARAM_INT);
    
    // assign values and execute
    $sku = $data['sku'];
    $subject = $data['subject'];
    $comment = $data['comment'];
    foreach ($data['product'] as $key => $product) {
        $qty = $data['qty'][$key];
        $stmt->execute();
        echo "$product $qty\n";
    }
    

    请注意,您不需要采用 INSERT 语句格式的 SET

    【讨论】:

    • 感谢它的工作,但为什么 $MY_PRODUCT_VAR = trim(stripslashes(htmlspecialchars($_POST['product']))); $MY_PRODUCT_VAR = preg_replace(['/\s{2,}/', '/[\t\n]/'], ' ', $MY_PRODUCT_VAR); 不能用于安全目的
    • @Satyam 我不确定您所说的“不为安全目的工作”是什么意思?
    • 我可以这样写吗$sku = trim(stripslashes(htmlspecialchars($data['sku'])))
    • @Satyam 当然可以,但是如果您要确保 SKU 是数字或仅包含数字,您可能应该使用类似 ctype_digit'filter_var`
    • 我能不能最后一次告诉我,当任何key 为空时,我如何在[qty] 错误中检查和添加验证
    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多