将MySQL记录插入到具有字段名数组和值数组的表中

时间:2014-10-16 作者:Richard

我在法典中看到:

$wpdb->insert( $table, $data, $format );
我正在使用这种类型的代码,它可以工作:

$wpdb->query( 
    $wpdb->prepare(
        "INSERT INTO `table` (`field1`,`field2`,`field3`,`field4`) VALUES (%d,%d,%d,%s) ", 
        $_REQUEST[\'field1\'], $_REQUEST[\'field2\'], $_REQUEST[\'field3\'], $_REQUEST[\'field4\']
    )
);
我有一个表单,它有20个可选字段,所以我不想只插入所有字段,因为有些字段可能不会传递任何值。我想先检查它们,然后仅在表中填写代码时才将其添加到表中。

我可以把最后一部分:

$_REQUEST[\'field1\'], $_REQUEST[\'field2\'], $_REQUEST[\'field3\'], $_REQUEST[\'field4\']
作为一个数组,以便动态构建它,如下所示:

$_sqlCode = "";
$_sqlValues = array();
if(isset($_REQUEST[\'field1\']) && $_REQUEST[\'field1\'] != "") {
    if($_sqlCode) { $_sqlCode .= \', `field1`\';} else { $_sqlCode = \'`field1`\';}
    $_field1Value = $_REQUEST[\'field1\'];
    $_sqlValues["$_field1Value"] = $_field1Value;
}
对于表单中的每个字段,对于表,都要这样做吗?

仅使用key=>value, 然后做一个foreach 循环,然后像那样构建字符串?我不知道是否可以将数组放入values部分,也不知道该如何操作。

1 个回复
SO网友:Milo

是的,您可以传递一个值数组。这在法典中有解释Protect Queries Against SQL Injection Attacks

value_parameter (int | string | array)要替换为占位符的值。通过以类似sprintf()的方式传递更多参数,可以传递许多值。Alternatively the second argument can be an array containing the values as in PHP\'s vsprintf() function.

$metakey = "Harriet\'s Adages";
$metavalue = "WordPress\' database interface is like Sunday Morning: Easy.";

$wpdb->query( $wpdb->prepare( 
    "
        INSERT INTO $wpdb->postmeta
        ( post_id, meta_key, meta_value )
        VALUES ( %d, %s, %s )
    ", 
        array(
        10, 
        $metakey, 
        $metavalue
    ) 
) );

结束