如何通过插件将数据正确插入到定制表中

时间:2016-07-14 作者:Breno

我有一个插件,可以从上传的文件中读取数据,并在wp数据库上运行查询。这些插入内容被插入到我的插件创建的表中,因此它们不是post类型。

这就是我工作的方式:

$connection = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
mysqli_query($connection, $query);
问题是我必须声明这些变量($db_host, $db_user, $db_pass, $db_name) 插件源代码内部。

有没有办法用wp api将数据插入到自定义表中?或者,是否有一种方法可以从外部文件中提取这些变量,而在版本控制设置中可以忽略这些变量?

3 个回复
最合适的回答,由SO网友:Ismail 整理而成

当WP最初为您连接DB时,尝试使用自己的方法连接DB不是一个好的做法。

问题是我必须在插件源代码中声明这些变量($db\\u host、$db\\u user、$db\\u pass、$db\\u name)。

所有这些属性都在中定义wp-config.php 文件,位于根区域。

如果要获取这些常量,只需包含文件并调用常量,或者使用REGEX(最好使用REGEX,因为可能还有其他回调需要加载WordPress)

// loading the config file to pull the DB_* constants
$dirname = dirname(__FILE__);
$root = false !== mb_strpos( $dirname, \'wp-content\' ) ? mb_substr( $dirname, 0, mb_strpos( $dirname, \'wp-content\' ) ) : $dirname;
// if $root is not correct, provide a static path then, $root = \'/path/to/root/dir\'
// assuming constants are ready (wp is configured), let\'s get them.
require_once( $root . "wp-config.php" );
echo var_dump(
    \'DB name\', DB_NAME,
    \'DB user\', DB_USER,
    \'DB password\', DB_PASSWORD,
    \'DB host\', DB_HOST
);
这里有一个更好的解决方案:

Load WordPress

require( \'/wp-blog-header.php\' ); 您应该提供该文件的工作路径!

要测试是否已成功加载WordPress,请转储以下内容:

add_action("wp", function() { 
    echo sprintf( "Yes! I am creating with WordPress v. %s!\\n", get_bloginfo("version") );
    exit("I exits\\n");
});

Now use WordPress DB API

要插入数据,请执行以下操作wpdb::insert 您应该使用。这里是语法

$wpdb->insert( $table, $data, $format ); 示例用途:

$wpdb->insert( 
    \'messages\', 
    array( 
        \'PM_ID\'     => (int) $pm_id,
        \'sender\'    => $current_user->ID,
        \'recipient\' => (int) $recipient,
        \'message\'   => "Hello!\\n",
        \'date\'      => time()
    )
);
$record_id = $wpdb->insert_id;
在本例中,中的数组$wpdb->insert\'s 2nd param是一个数组,索引作为列名,并将这些列的值插入到一个独立记录中,您可以使用该记录获取其ID$wpdb->insert_id 获取该表中最后一个记录插入ID。

如果您至少不使用SQL注入,希望这会有所帮助$wpdb::insert 或准备好的语句,而不是直接查询。

SO网友:Sabbir Hasan

为什么不研究一下$wpdb 作品参观https://codex.wordpress.org/Class_Reference/wpdb

下面是一个如何使用将数据插入数据库的示例$wpdb

<?php
  global $wpdb;

  $wpdb->insert( 
    \'table_name_here\', 
    array( 
        \'column1\' => \'value1\', 
        \'column2\' => 123 
    ), 
    array( 
        \'%s\', 
        \'%d\' 
    ) 
 );
?>
访问https://codex.wordpress.org/Creating_Tables_with_Plugins 更多信息。

SO网友:Navin Bhudiya
<?php 
global $wpdb;
 $table="test_table";
$store_arr["name"]="test";
$store_arr["email"]="[email protected]";

$wpdb->insert( $table, $store_arr);
 ?>