我正在尝试使用插件激活钩register_activation_hook
将数据插入到自定义表中,因此当插件处于活动状态时,数据库及其数据将自动插入。数据位于插件目录中的文本文件中。当我激活插件数据库时,却没有插入。我想我没有看错txt文件。有人可以帮我解决这个问题吗?
我有一个文本文件格式的数据列表,例如
123|Jhon Doe
124|Michel Muller
125|Jems Curter
126|Miss Weedy
127|Burgel Heigen
我正在尝试将它们导入wordpress数据库,但是失败了。
贝洛是我的代码。
//creating db table
function sbl_employee_create_db() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$table_employee = $wpdb->prefix . 'sbl_employee';
$table_br_name = $wpdb->prefix . 'sbl_br_name';
$sql = "CREATE TABLE IF NOT EXISTS $table_br_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
br_code int(5) NOT NULL,
br_name varchar(220) NOT NULL,
UNIQUE KEY id (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
//function to insert branch data to database
function insert_brcode_name(){
global $wpdb;
$textCnt = plugin_dir_path( __FILE__ )."data.txt";
$file = fopen($textCnt, 'r');
$arrfields = explode('|', $file);
$br_code = $arrfields[0];
$br_name = $arrfields[1];
$data = array(
'br_code' => $br_code,
'br_name' => $br_name,
);
//format values: %s as string; %d as integer
$format = array(
'%s', '%d'
);
$wpdb->insert( $tablename, $data, $format );
}
//do action when plugin active
register_activation_hook( __FILE__, 'sbl_employee_create_db' );
register_activation_hook( __FILE__, 'insert_brcode_name' );
答案 0 :(得分:1)
insert_brcode_name()
函数存在多个问题:
假设文件已成功打开(通过fopen()
),$file
实际上是文件指针资源,而不是string
。因此$arrfields = explode('|', $file);
不起作用-它不会给您预期的结果(PHP会发出警告)。
第二,$format
应该是array( '%d', '%s' )
,而不是array( '%s', '%d' )
,因为在$data
数组中,第一项是br_code
(整数/ int
),第二项是br_name
(字符串/ varchar
)。 所以 $format
中的第一项是$data
中的第一项; $format
中的第二项是$data
中的第二项;等等其他项目。
$tablename
未定义;我认为是$wpdb->prefix . 'sbl_br_name'
表。
这是insert_brcode_name()
没有上述问题:(经过测试并测试有效)
function insert_brcode_name(){
$textCnt = plugin_dir_path( __FILE__ ) . "data.txt";
$file = @fopen($textCnt, 'r');
// Make sure that it's a valid file pointer resource.
if ( ! $file ) {
return false;
}
global $wpdb;
$tablename = $wpdb->prefix . 'sbl_br_name';
// Reads each line in the file.
while ( ! feof( $file ) ) {
$line = fgets( $file );
$arrfields = explode('|', $line);
// Ignores invalid entries..
if ( count( $arrfields ) < 2 ) {
continue;
}
$br_code = $arrfields[0];
$br_name = $arrfields[1];
//echo $br_code . '|' . $br_name . '<br>';
$data = array(
'br_code' => $br_code,
'br_name' => $br_name,
);
//format values: %s as string; %d as integer
$format = array(
'%d', // Format of `br_code`
'%s', // Format of `br_name`
);
$wpdb->insert( $tablename, $data, $format );
}
fclose( $file );
}
注意:为清楚起见,代码已重新缩进。除了主要的修复程序之外,还进行了一些较小的更改。