php 如何使用动态数组运行MySQLi预准备语句?[副本]

ttvkxqim  于 11个月前  发布在  PHP
关注(0)|答案(2)|浏览(67)

此问题已在此处有答案

Mysqli prepared statements build INSERT query dynamically from array(1个答案)
4小时前关闭
我希望能够做的是创建一个准备好的语句,它将根据输入的数组插入值,该数组将是动态的。我所说的动态是指通过添加一个额外的行来更改数组$table的能力,例如下面注解掉的一行,它可以正确地发送和插入值到表中,而不管有多少值存在。由于我新使用了预处理语句,我不能只使用以前的方法:

INSERT INTO table ($fields) VALUES ($data)

字符串
因为这是不安全的,并且对SQL注入开放。

$table = array();
$table['Favorite_Chocolate']     = 'Milk';
$table['Favorite_Cake']          = 'Vanilla';
$table['Favorite_IceCream']      = 'Neapolitan';
//$table['Favorite_Candy']      = 'Taffy';

function magic_insert ($table, $dbc) {

    if ($stmt = mysqli_prepare($dbc, "INSERT INTO mytable (?, ?, ?) VALUES (?, ?, ?)")) {
            mysqli_stmt_bind_param($stmt, "ssssss", $1, $2, $3, $4, $5, $6);
            $1 = array_keys($table)[0];
            $2 = array_keys($table)[1];
            $3 = array_keys($table)[2];
            $4 = array_values($table)[0];
            $5 = array_values($table)[1];
            $6 = array_values($table)[2];

            mysqli_stmt_execute($stmt);
            mysqli_stmt_close($stmt);
        }
    }

m0rkklqb

m0rkklqb1#

我推荐使用PHP的PDO函数(主要与面向对象编程的类结合使用)。你可以在这里找到一个很好的PDO介绍:http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059

oalqel3c

oalqel3c2#

我想这就是他想要的。

function magic_insert ($table, $dbc) {
    $columns = array_keys($table);
    $values = array_values($table);
    $col_count = count($columns);
    $value_str = substr(str_repeat("?,", $col_count), 0,-1);                    // e.g. ?, ?, ?
    $value_types_str = str_repeat("s", $col_count);                             // sssss
    $insert_sql_cols = implode($columns, ",");
    $sql = "INSERT INTO test_table ($insert_sql_cols) VALUES ($value_str)";
    if ($stmt = mysqli_prepare($dbc, $sql)) {
        mysqli_stmt_bind_param($stmt, $value_types_str, ...$values);
        mysqli_stmt_execute($stmt);
        mysqli_stmt_close($stmt);
    }
}

字符串

相关问题