使用 WPDB 连接到外部数据库以使用 php 插入动态表单数据

Using WPDB to connect to external database for inserting dynamic form data with php

我有一个外部数据库,我希望使用 $wpdb 将我的表单数据插入其中。在表单所在的页面上,我可以将 $wpdb 声明为全局变量,然后执行 newdb 来提取结果并将它们回显到我的表单中。

此代码目前有效:

<?php
global $wpdb;
$member_id = SwpmMemberUtils::get_logged_in_members_id();
$field_name = 'user_name';
$fname_value = SwpmMemberUtils::get_member_field_by_id($member_id, $field_name); 

    $newdb = new wpdb( 'user' , 'pass' , 'database' , 'localhost' );
    $newdb->show_errors();
$results = $newdb->get_results($wpdb->prepare("SELECT * FROM member_lists WHERE username = %s",$fname_value));
?>

对于提交表单操作,我在我的主题子文件夹中有一个名为 update-list.php 的 PHP 文件,用于为我的 post 数据插入不工作。我收到此错误:

Fatal error: Uncaught Error: Class 'wpdb' not found in /home/site/www/www/home/wp-content/themes/Avada-child/update-list.php:4 Stack trace: #0 {main} thrown in /home/site/www/www/home/wp-content/themes/Avada-child/update-list.php on line 4

这是该更新的代码-list.php 文件:

<?php

global $wpdb;
$newdb = new wpdb( 'user' , 'pass' , 'database' , 'localhost' );

$stats = array();
for( $i = 0; $i <= $stats; $i++ ) 
{
    $stats[] = array(
        'username' => $_POST['username'],
        'first_name' => $_POST['first_name'],
        'last_name' => $_POST['last_name'],
        'county' => $_POST['county'],
        'street' => $_POST['street'],
        'city' => $_POST['city'],
        'ward' => $_POST['precinct'], 
    );
}

foreach ( $stats as $stat )
    $newdb=$wpdb->insert( 'member_lists', $stat );


?>

为什么它在我的表单页面上识别 wpdb 而在表单操作更新-list.php 文件中却不识别?

这听起来像是您应该 Using AJAX 的事情(这将消除手头的问题)。

话虽如此,您目前的问题是因为您实际上是在发布到一个 任意 PHP 文件 不知道WordPress。由于它没有通过 WordPress 方法加载到请求中,因此您需要自己加载 WordPress。看看this WPSE answer.

基本上,您至少需要在 update-list.php 文件的顶部添加 require_once '/path/to/your/wp-load.php';,然后才能使用 'WordPress',包括 $wpdb .