我在添加用户时遇到MYSQL_REAL_EASH_STRING()函数错误?

时间:2016-12-16 作者:Prasad Patel

我编写了一个插入wordpress用户的代码,如果我尝试添加新用户,我会收到3个警告错误,如下所示:

“警告:mysql\\u real\\u escape\\u string()期望参数1是字符串,第1129行的/home/intecom/public\\html/app/wp includes/wp-db.php中给出的对象”,

“警告:第725行的isset中的偏移量类型非法或/home/intecom/public\\u html/app/wp includes/cache.php中为空”

“警告:array\\u key\\u exists():第725行的/home/intecom/public\\html/app/wp includes/cache.php中的第一个参数应该是字符串或整数”。

我的代码如下:

  $first_name = \'my_firstname_value\';
  $last_name = \'my_lastname_value\';
  $trainer_email = \'[email protected]\';
  $course_registered = Array
                      (
                        [0] => 2410
                      );
  $pro_icon_status = \'1\';
  $this->institute_icon[0] = \'1\';
  $this->institute_name[0] = \'my_institute_name\';
  $user_data = array(
                    \'user_login\' => $first_name,
                    \'user_pass\' => \'\',
                    \'user_email\' => $trainer_email,
                    \'first_name\' => $first_name,
                    \'last_name\' => $last_name,
                    \'role\' => \'trainer\'
                );
                $random_password = wp_generate_password(8,false);
                $user_id = wp_insert_user( $user_data );

                update_user_meta( $user_id, \'course_registered\',$course_registered );
                update_user_meta( $user_id, \'inistitute_name\',$this->institute_name[0] );
                update_user_meta( $user_id, \'inistitute_icon\',$this->institute_icon[0] );
                update_user_meta( $user_id, \'trainer_icon\',$pro_icon_status );
                wp_set_password($random_password, $user_id);
我的输入只是字符串(或)数组,但为什么它会说“我正在传递对象”,我不知道发生了什么。这快把我逼疯了。谁能告诉我我犯了什么错吗?提前谢谢。

更新:问题不在于“wp\\u insert\\u user”或“Update\\u user\\u meta”,实际问题在于我提供的数据,即我提供的用户名与数据库中已有的用户名相同,我得到的wp\\u错误对象如下:

  WP_Error Object
  (
    [errors] => Array
    (
        [existing_user_login] => Array
            (
                [0] => Sorry, that username already exists!
            )

    )

    [error_data] => Array
                  (
                  )

    ) 
现在你能告诉我如何在前端向用户显示错误吗?

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

问题来自wp_insert_user 事实上你的价值user_pass 为空。

你应该更新你的代码

 $random_password = wp_generate_password(8,false);
 $user_data = array(
                \'user_login\' => $first_name,
                \'user_pass\' => $random_password,
                \'user_email\' => $trainer_email,
                \'first_name\' => $first_name,
                \'last_name\' => $last_name,
                \'role\' => \'trainer\'
            );
并删除此行wp_set_password($random_password, $user_id);

您还应该检查$user_id 确保不会返回WP_Error object 您可以使用var_dump($user_id\')

SO网友:Khuram

如果未建立到mysql的链接,则无法使用mysql\\u real\\u escape\\u string()。在连接到mysql之前,您已经使用了mysql\\u real\\u escape\\u string()函数。

SO网友:Tunji

您好,您必须对代码进行一些调试,确保将所有变量传递给update_user_meta() 是字符串或数组,而不是对象。

FROM THE CODEX

meta\\u键的新所需值,该值必须与现有值不同。数组和对象将自动序列化。请注意,使用对象可能会导致this bug 弹出。