使用WPDB将数据插入到外部数据库

时间:2013-07-16 作者:Andy McCormick

我第一次尝试在Wordpress中使用外部db,但似乎无法将数据插入到db中。以下是我所拥有的:

    <?php
    global $wpdb;
    $url = home_url();

        require_once($url.\'/viper/confff.php\');  //contains variable to fill in below
            $newdb = new wpdb($username, $password, $db_name, $host);
            $newdb->show_errors();
     ?>

$numrows = $newdb->get_results("SELECT * FROM chi_clients WHERE AccountNum=\'$acctNum\'");

      if($numrows!=0)
      {
        $row =  $newdb->get_results("SELECT * FROM chi_clients WHERE AccountNum=\'$acctNum\'",ARRAY_A);    
                $name= $row[\'lastName\'] . ", " . $row[\'firstName\'];
        $phone= $row[\'phone\'];
        $phonearea = substr($phone,0,3);
        $phonemain = substr($phone,3,10);
        $phonenumber = $phonearea ."-". $phonemain;
        $email= $row[\'email\'];

        $newdb ->insert (
                    chi_orders, array(
                        \'name\' => \'$name\',
                        \'AccountNum\' => \'$acctNum\',
                        \'email\' => \'$email\',
                        \'OrderDesc\' => \'$orderDesc\',
                        \'product\' => \'$service\',
                        \'quantity\' => \'$quantity\',
                        \'notes\' => \'$notes\',
                        \'status\' => \'Order Received\',
                        \'dateIne\' => \'$todayDate\',
                        \'dateOut\' => \'$newDate\',
                        \'advert\' => \'$advert\',
                        \'phone\' => \'$phonenumber\'
                    )
                   );
        }


        else {
           echo\'<span style="color: #000; font-family: Verdana; font-weight: bold; font-size: 12px;">Incorrect Account Number!</span>\';
                 }
我知道数据正在发布到页面上,因为我已经将变量回显到页面上。但是,它没有连接到数据库,因为我没有从get\\u results SELECT语句中获取信息,也没有向数据库中插入任何内容。对于我的$host,我使用的是“localhost”,这是我一直用于这个特定数据库的。我知道用户名、密码和数据库名称是正确的。

有什么想法吗?谢谢

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

您正在使用$wpdb 错误地查看这些行:

$row =  $newdb->get_results("SELECT * FROM chi_clients WHERE accountNum=\'$acctNum\'",ARRAY_A);    
$name= $row[\'lastName\'] . ", " . $row[\'firstName\'];
$wpdb->get_results 将返回一个“行”数组。它将是多维的。您将其视为返回了一维数组。也就是说,这(完全不同的数据,但说明了预期的阵列):

array(10) {
  [0]=>
  array(23) {
    ["ID"]=>
    string(1) "1"
    ["post_author"]=>
    string(1) "1"
    ["post_date"]=>
    string(19) "2013-03-26 18:37:57"
    ["post_date_gmt"]=>
    string(19) "2013-03-26 18:37:57"
    ["post_content"]=>
    string(429) "[testsc]
    ...
您需要在该结果集上循环以获得单独的行,或者执行以下操作:

$name= $row[0][\'lastName\'] . ", " . $row[0][\'firstName\'];
这是真的,即使结果集是一行。如果知道结果集只有一行,则可以使用$wpdb->get_row 相反,这将给你一个一维数组。

其次,变量不会在单引号内展开,因此所有以这种方式使用变量的尝试--\'name\' => \'$name\',-- 简单是行不通的。你真的设定了name$name, 不适用于$name 变量

第三,第一个参数$wpdb ->insert 是表示表名的字符串。您已经使用了PHP将解释为常量的内容,几乎可以肯定它是一个未定义的常量。你需要报价chi_orders.

这些就是我发现的问题。如果纠正这些问题并不能解决问题,它会让你前进很多。

SO网友:Aribam Karan

创建自定义模板并在其中添加以下代码

$\\u POST[\'yourname\',\'email\'=>$\\u POST[\'email])$格式=数组(\'%s\',\'%s\')$成功=$wpdb->插入($table,$data,$format);如果($success){echo“数据已保存”;}}}其他{?>

结束