Как вставить значения массива в таблицу базы данных в виде пар ключ-значение в php - PullRequest
3 голосов
/ 13 января 2020

Я использую массив, куда я вставляю данные в вызов таблицы z_error_log. Эти вставленные данные дают мне следующий вывод в таблице под столбцом «data».

(user_role,email,nic,password,payment,reg_date)=(2,dfghjkbhjn@gmail.com,123456789045,$2y$10$R4MOTLHlhe1M9GCt0utxQO3d43oFrH.34ivCPPtHpral.cM/kW5sq,0,2020-01-13 14:44:27)

Но на самом деле мне нужно вставить эти данные в таблицу, где они хранятся следующим образом.

user_role = 2,email=dfghjkbhjn@gmail.com,nic=123456789045,password=$2y$10$R4MOTLHlhe1M9GCt0utxQO3d43oFrH.34ivCPPtHpral.cM/kW5sq,payment,reg_date=2020-01-13 14:44:27

Мне нужно присвоить значение сразу после его имени, как указано выше.

Здесь я добавляю Часть класса Vendor_cont и функцию в файл Log_model. php, где я использую для ввода данных в таблицу z_error_log.

================ Vendor_cont.php ===================

class Vendor_cont
{

//CLASS Content

  }
            }

            // ===================EDITED If Recaptcha Fail=====================================

             else {

                             $userData = array(
                             'user_role'=>'2',
                             'email' => $email,
                             'nic' => $nic,
                             'password' =>$password,
                             'payment' =>0,
                             'reg_date' =>date('Y-m-d H:i:s')
                          );

                $_SESSION['Emessages'] = 'Recaptcha Failed. Please try again later'; 

                $this->LModel->createErrorLog(3,'Vendor_cont/register_vendor/recaptcha_fail',$email,$userData);


                }

        //========================================================================================

}

================== Log_model.php ==================

    public function createErrorLog($user,$function,$error_data,$data_obj){ 

            $ip=$_SERVER['REMOTE_ADDR'];
            $browser_os=  $_SERVER['HTTP_USER_AGENT'];

            $data= (array) $data_obj;

            // print_r($data);

            if (is_array($data)) {
                $val = '(' . implode(',', array_keys($data)) . ')';
                $val .= '=(' . implode(',', $data) . ')';
            } else {
                $val = $data;
            }


    // =============EDITED==============

            $oStmt= $this->oDb->prepare('INSERT INTO z_error_log (`function`, `error_data`,`data`,`user` ,`ip`,`browser_os`) VALUES (:function,:error_data,:data,:user,:ip,:browser_os)');
            $oStmt->bindParam(':function', $function, \PDO::PARAM_STR);
            $oStmt->bindParam(':error_data', $error_data, \PDO::PARAM_STR);
            $oStmt->bindParam(':data', $val, \PDO::PARAM_STR);
            $oStmt->bindParam(':user', $user, \PDO::PARAM_INT);
            $oStmt->bindParam(':ip', $ip, \PDO::PARAM_STR);
            $oStmt->bindParam(':browser_os', $browser_os, \PDO::PARAM_STR);
            $oStmt->execute();

            return  $this->oDb->lastInsertId();

        }

Я очень ценю вашу помощь. Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 13 января 2020

Пожалуйста, измените вашу функцию createErrorLog (), используя приведенный ниже код. Я надеюсь, что вы можете получить желаемый результат с помощью этого.

$email = "test@gmail.com";
$nic ="nic";
$password ="Pass@123";

$userData = array(
     'user_role'=>'2',
     'email' => $email,
     'nic' => $nic,
     'password' =>$password,
     'payment' =>0,
     'reg_date' =>date('Y-m-d H:i:s')
);
foreach($userData as $key=>$val) {
    $finalValue .= $key.'='.$val.',';
}
echo rtrim($finalValue,",");

Замените функцию createErrorLog () в файле модели на код ниже, и все готово. Не забудьте создать столбец данных в базе данных как текстовый тип и передать значение в виде строки.

public function createErrorLog($user,$function,$error_data,$data_obj){ 
        $ip=$_SERVER['REMOTE_ADDR'];
        $browser_os=  $_SERVER['HTTP_USER_AGENT'];
        $data= (array) $data_obj;

        foreach($data as $key=>$val) {
            $finalValue .= $key.'='.$val.',';
        }
        $val = rtrim($finalValue,",");

        // =============EDITED==============
            $oStmt= $this->oDb->prepare('INSERT INTO z_error_log (`function`, `error_data`,`data`,`user` ,`ip`,`browser_os`) VALUES (:function,:error_data,:data,:user,:ip,:browser_os)');
            $oStmt->bindParam(':function', $function, \PDO::PARAM_STR);
            $oStmt->bindParam(':error_data', $error_data, \PDO::PARAM_STR);
            $oStmt->bindParam(':data', $val, \PDO::PARAM_STR);
            $oStmt->bindParam(':user', $user, \PDO::PARAM_INT);
            $oStmt->bindParam(':ip', $ip, \PDO::PARAM_STR);
            $oStmt->bindParam(':browser_os', $browser_os, \PDO::PARAM_STR);
            $oStmt->execute();
            return  $this->oDb->lastInsertId();
    }
2 голосов
/ 13 января 2020

MySQL не понимает массив, поэтому либо вы можете преобразовать в json, либо добавить все данные в отдельный столбец. Для добавления в отдельный столбец вы можете использовать implode с именами столбцов. Ваш опубликованный вопрос довольно большой, вы можете урезать его фиктивным кодом. Также см. this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...