在插件数据库中插入数组

时间:2013-12-18 作者:Jack Torris

试图创建一个插件,在wordpress数据库中提交数组数据时遇到一些问题。

$formDATA获取数组值现在问题是何时

    $sql = "INSERT INTO `".$table_name ."` (`paid_arr`) VALUES \'".$formDATA."\'";

   $result  = $wpdb->insert($table_name,$formDATA);
收到奇怪的警告和错误,无法在wp DB中插入数据。

  Warning: array_keys() expects parameter 1 to be array, string given in /home3/mahesh/public_html/project/lal/wp-includes/wp-db.php on line 1316

 Warning: Invalid argument supplied for foreach() in /home3/mahesh/public_html/project/lal/wp-includes/wp-db.php on line 1318

  Warning: implode() [function.implode]: Invalid arguments passed in /home3/mahesh/public_html/project/lal/wp-includes/wp-db.php on line 1327
这里是php代码;

$formDATA = array(
    \'fname\'     => $fname,
    \'lname\'     => $lname,
    \'email\'     => $paidemail,
    \'Phone\'     => $paidphone,
    \'gender\'    => $gender,
    \'hobbies\'   => $interest,
    \'hear\'      => $city,
    \'message\'   => $message_field,
    \'time\'      => $curtime
 );

formsubmitpaid($formDATA);       

function formsubmitpaid( $formDATA ) {

global $wpdb;
$formDATA = json_encode($formDATA);
$table_name = $wpdb->prefix . "padi_forms";
$sql = "INSERT INTO `".$table_name ."` (`paid_arr`) VALUES \'".$formDATA."\'";
$result  = $wpdb->insert($table_name,$formDATA);

if( !$result ){
    echo \'<script>alert("dfdf")</script>\';
} else {
    echo \'<script>alert("No")</script>\';
 }
print_r($sql);
print_r($result);

} 

3 个回复
SO网友:Shazzad

您应该以数组的形式传递数据,而不是json编码的字符串。因此,更改这些行将起作用。只需删除以下行-

$formDATA = json_encode($formDATA);
如果要查看引用,请以这种方式准备sql

$sql = "INSERT INTO `".$table_name ."` (`paid_arr`) VALUES \'".json_encode($formDATA)."\'";

SO网友:nur

您可以使用phpserialize 函数在插入到数据库之前将数组转换为字符串。在检索过程中,调用unserialize 函数从字符串中获取数组。

插入:

$result  = $wpdb->insert($table_name,serialize($formDATA));
要检索:

   $result = unserialize($wpdb->get_col("SELECT paid_arr from $table_name"));
您还可以使用json\\U编码和json\\U解码。但是json\\*函数在旧版本的php中不可用。

SO网友:Subharanjan

你不必json_encode 数组只要具有与表单数据键值相同的表结构。参考号:wpdb

$formDATA = array(
    \'fname\'     => $fname,
    \'lname\'     => $lname,
    \'email\'     => $paidemail,
    \'Phone\'     => $paidphone,
    \'gender\'    => $gender,
    \'hobbies\'   => $interest,
    \'hear\'      => $city,
    \'message\'   => $message_field,
    \'time\'      => $curtime
);

formsubmitpaid($formDATA);      

function formsubmitpaid($formDATA) {
    global $wpdb;
    $table_name = $wpdb->prefix . "padi_forms";    

    $result = $wpdb->insert( 
        $table_name, 
        $formDATA, 
        array( 
            \'%s\', 
            \'%s\', 
            \'%s\', 
            \'%s\', 
            \'%s\', 
            \'%s\', 
            \'%s\', 
            \'%s\', 
            \'%s\' 
        ) 
    );  

    if( $result === false )
        echo \'Error\';
    else 
        echo \'success\';
} 

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。