使用 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
.
我有一个外部数据库,我希望使用 $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
.