您不需要删除prepare()
, 但你只需要把它做好
请检查$wpdb->prepare()
reference 对于函数的语法等,但基本上不是(为了简洁而包装):
$insert_query = "INSERT INTO `".$computer_repair_items."`
VALUES(NULL, \'".$wc_service_name."\', \'services\', \'".$post_id."\')";
$wpdb->query(
$wpdb->prepare($insert_query)
);
你应该这样做:(假定
$computer_repair_items
是有效的表名)
$insert_query = $wpdb->prepare(
"INSERT INTO `$computer_repair_items` VALUES(NULL, %s, \'services\', %d)",
$wc_service_name, // 2nd parameter; replaces the %s (first placeholder)
$post_id // 3rd parameter; replaces the %d (second placeholder)
);
$wpdb->query( $insert_query );
一、 e.必须将至少两个参数传递给
$wpdb->prepare()
:
在first parameter 是SQL命令,其格式应与PHP的sprintf()
函数,即使用占位符,如%s
对于字符串和%d
对于整数。
第二个参数应该是上述SQL命令中第一个占位符的替换值,即第一个参数。在我给出的例子中,第二个参数是$wc_service_name
该值替换%s
在SQL命令中<但是请注意,您应该not 将占位符用引号括起来,以便\'%s\'
和"%s"
例如,不正确且仅使用%s
.
根据您的SQL命令,您还可以有第三个、第四个、第五个等参数,就像在我给出的示例中一样,其中有第三个参数,即$post_id
对于%d
占位符。
实际上single INSERT
操作,您可以简单地使用$wpdb->insert()
:
// Make sure you replace the column NAMES.
$wpdb->insert( $computer_repair_items, [
\'column\' => $wc_service_name,
\'column2\' => \'services\',
\'column3\' => $post_id,
] );
对于多个插入,可以尝试以下操作:
$insert_values = [];
foreach ( [
[ \'wc_service_code\', $wc_service_code ],
[ \'wc_service_id\', $wc_service_id ],
[ \'wc_service_qty\', $wc_service_qty ],
[ \'wc_service_price\', $wc_service_price ],
] as $row ) {
$insert_values[] = $wpdb->prepare( "(NULL, %d, %s, %s)",
$order_item_id, $row[0], $row[1] );
}
$insert_query = "INSERT INTO `$computer_repair_items_meta`
VALUES " . implode( \',\', $insert_values );
$wpdb->query( $insert_query );
或者直接打电话
$wpdb->insert()
多次。。