我这里有一个奇怪的错误。我正在尝试写入wordpress数据库,但是$wpdb->insert
不写入变量的名字。
有人能发现这段代码中的错误吗?
function pay_record_register( $first_name = "NA",
$last_name = "NA",
$payer_email = "NA",
$item_name = "NA",
$gross = "NA",
$currency = "NA",
$payment_status = "NA",
$payment_date = "NA",
$address_street = "NA",
$address_zip = "NA",
$address_city = "NA",
$address_country = "NA",
$address_status = "NA" ) {
global $wpdb;
$table_name = $wpdb->prefix . \'pay_record\';
$wpdb->insert($table_name, array( \'last_name\' => $last_name,
\'first_name\' => $first_name,
\'payer_email\' => $payer_email,
\'item_name\' => $item_name,
\'gross\' => $gross,
\'currency\' => $currency,
\'payment_status\' => $payment_status,
\'payment_date\' => $payment_date,
\'address_street\' => $address_street,
\'address_zip\' => $address_zip,
\'address_city\' => $address_city,
\'address_country\' => $address_country,
\'address_status\' => $address_status
));
}
在我的DB中,除了first\\u name之外,每个变量都打印有默认值(我没有发送任何值)。first\\u name为空。。。
以下是我的表格结构图:
我对任何提示、窍门或答案都很在行:)
SO网友:MathSmath
就$first\\u name而言,我认为代码没有任何问题。我猜您的实际DB列名在模式中拼写错误,或者设置不正确(可能是类型、长度等错误)。
这并不能回答您的问题,但我有一个提示:当一个函数有这么多参数时(尤其是当有这么多参数是可选的时),将它们作为数组传递会更干净。这就是WordPress本身处理具有大量参数的函数的方式,并且有一些帮助函数可以使其变得简单。此样式的示例函数可能如下所示:
wpsx_53999_parse_args_example($arr_args) {
// Deafults array
$arr_defaults = array(
last_name => \'NA\',
payer_email => \'NA\',
item_name => \'NA\',
gross => \'NA\',
currency => \'NA\',
payment_status => \'NA\',
payment_date => \'NA\',
address_street => \'NA\',
address_zip => \'NA\',
address_city => \'NA\',
address_country => \'NA\',
address_status => \'NA\',
);
extract( wp_parse_args($arr_args, $arr_defaults), EXTR_SKIP );
// Now, all the params are extracted as in-scope variables!
// You can use them like, $first_name, $last_name, etc. from here on out
}
在本例中
wp_parse_args() function 将任何传递的值与默认值进行比较,并从本质上协调两者。这个
extract() function 将最终数组的所有位拉入局部范围。
这里最大的优点是,当您实际调用函数时,只需传入一组必要的值。因此,您不必用“FALSE”或“NULL”占位符值来填充调用,只需保持正确的顺序即可。