使用 WordPress $wpdb 将数据插入到 WordPress 数据库中的表中

Posted

技术标签:

【中文标题】使用 WordPress $wpdb 将数据插入到 WordPress 数据库中的表中【英文标题】:Inserting data into a table in WordPress database using WordPress $wpdb 【发布时间】:2012-06-27 16:31:01 【问题描述】:

我正在开始插件开发,并按照 WordPress Codex 网站上的教程进行操作。我现在卡住了 - 我有一个名为“wp_imlisteningto”的数据库,其中wp_ 是使用以下方法插入的:

$table_name = $wpdb->prefix . "imlisteningto";

插件激活时。

数据库本身有三列,在插件激活时设置:

$sql = "CREATE TABLE $table_name (
id mediumint(9) AUTO_INCREMENT,
album VARCHAR(50),
artist VARCHAR(50),
PRIMARY  KEY (id)
);";

我正在尝试从 php 表单将数据(通过创建新行)插入到该数据库中。

在 WordPress 管理员中,我创建了一个具有非常简单表单的新页面:

<form action="/wp-content/plugins/listeningto/formhtml.php" method="post">
Album: <input type="text" name="album" />
Artist: <input type="text" name="artist" />
<input type="submit">
</form>

如你所见,调用formhtml.php,即:

<?php
global $wpdb;

$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ), array( '$s', '$s' ) );
?>

当我提交表单时,当我在 IIS7.0 上运行 Worpdress 中的插件时,我得到一个 Error 500.0,当在另一个运行 apache 的 Web 服务器上运行时,我得到一个 "Page Not Found"

如果我将formhtml.php 更改为:

<?php

echo $_POST['album'];
echo $_POST['artist'];

?>

工作正常 - 我得到了我在表格中输入的专辑和艺术家。显然,在将数据(在新行中)插入数据库时​​我做错了。

你有什么想法吗?

更新

好的,如果我用这个更新formhtml.php

<?php
require_once('../../../wp-config.php');
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ), array( '$s', '$s' ) );
?>

我不再收到错误消息,但数据仍未放入数据库。

更新 2

这对我有用:

<?php
require_once('../../../wp-config.php');
global $wpdb;
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ) );
?>

这样做:

<?php
require_once('../../../wp-load.php');
global $wpdb;
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ) );
?>

因此,由于某种原因,$wpdb 无法正常工作,除非我需要 wp-configwp-load.php。如果包含wp-load.php$wpdb 获取值,一切正常。

【问题讨论】:

require_once(ABSPATH . 'wp-settings.php');应该也可以。 ABSPATH 定义为@wp-load.php 【参考方案1】:
  $global $wpdb;      
  $table_name1 = $wpdb->prefix.'php_crud';  
    
  $data_insert= array(                      
                    'uname1' => $uname1,
                    'uemail1' => $uemail1,
                    'upass1' => $upass1,
                    'language1' => $language1,
                    'gender1' => $gender1,
                    'ustate1' => $ustate1,
                    'file1' => $finalimg
                    );
 $form_insert1=$wpdb->insert($table_name1,$data_insert);
 if($form_insert1)
 
    echo "<div class='container' style color:red; >Form 
    Submitted Successfully<div>";   

else

    echo "ERROR";

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

根据数据库表创建您的数组。 然后使用 WP 插入。

 global $wpdb;
 $order = [
            'product_id' =>'1',
            'discount' => '1',
            'total' => '1',
            'status' => '1',
            'payment_method' => '1',
            'payment_reference' => '1',
            'sold_by' => '1'
        ];

$wpdb->insert('DB_TABLE_NAME', $order );

【讨论】:

【参考方案3】:

包括

require_once('../../../wp-config.php');

为我工作

【讨论】:

【参考方案4】:

您现在可能已经想通了,但这里没有人提到它。您的示例代码在第三个参数(第二个数组)中有“$s”,但这应该是“%s”,因为它用于值格式。 WP Codex 说 [http://codex.wordpress.org/Class_Reference/wpdb] $wpdb->insert() 的这个格式参数是可选的。

【讨论】:

【参考方案5】:

我认为你的 sql 字符串有 2 个错误。

认为应该是$table_name 变量应该被连接

$sql = "CREATE TABLE" . $table_name . "(
id mediumint(9) AUTO_INCREMENT,
album VARCHAR(50),
artist VARCHAR(50),
PRIMARY  KEY (id)
)";

并删除最后一行的;

【讨论】:

这是错误的,你最终会得到:CREATE TABLEwp_imlisteningto 注意到了,但表的创建不是问题,工作正常。【参考方案6】:

试试这个..

<?php
global $wpdb;

$wpdb->insert( $table_name, array( 'album' => "$_POST['album']", 'artist' => "$_POST['artist']" ) );
?>

例如:

<?php
global $wpdb;

$wpdb->insert($table_name , array('chart_name' => "Line Chart" ,'chart_type' => "trends",'status' => 0));

?>

【讨论】:

嗨,Ajay 感谢您的回复 - 不,这也不起作用。但是,我已经用对我有用的方法更新了我的帖子。 @MattyRasker 有效吗?欲了解更多信息snipt.net/ajaypatel_aj/wordpress-crud-queries

以上是关于使用 WordPress $wpdb 将数据插入到 WordPress 数据库中的表中的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress - $wpdb->插入 - MySQL NOW()

从 wordpress $wpdb 获取最后插入的 id

Wordpress“prepare”函数用于插入数据库

如何在 Wordpress 中插入数据?

Wordpress 更新 mysql 表

wordpress 常用函数-wpdb类