Вставить запись в MySQL из JSON

0

Я попытался вставить запись в базу данных MySQL из JSON. Я сделал что-то вроде этого:

// Check if the user is recorded on DB
$sql    = 'SELECT * FROM accounts WHERE email = :email AND password = :password';
$params = array('email' => $email, 'password' => $password);
$account   = $db->fetchOne($sql, $params);
if (!$account){

    //call api
    $url = 'http://example.com/index.php/auth?key=@13456&email={$email}&password={$password}';
    $json = file_get_contents($url);
    $decode = json_decode($json, true);

    foreach ($decode as $value) {
      foreach ($value as $key => $value) {
        echo $value;
      }
    }


    //insert account 
    $insertdata = $db->insert(
       'accounts',
        array(
            'email'             => $value['email'],
            'password'          => sha1($value['password'])

        )
    );        
}else{
    sendJsonError('We could not find your email.');
    return;
}

Сам ответ json:

{"status":"success","email":"[email protected]","password":"%4fksdhj*"}

Если в вызове api я пишу прямое значение пароля dan password, запись записывается в БД, но когда я создаю его динамически, как вызов API выше, он не будет записываться в систему.

Можете ли вы, ребята, посоветовать, как это сделать?

  • 0
    Нужны ли фигурные скобки { и } вокруг значений параметров в URL?
  • 0
    нет, если вызвать API со значением непосредственно без скобки
Показать ещё 13 комментариев
Теги:

1 ответ

0
Лучший ответ

Я считаю, что ваш код не правильно считывает значения параметров, потому что ваша строка находится в одинарных кавычках ('). PHP только интерполирует переменные, когда строка находится в двойных кавычках (").

Таким образом, вы можете

a) напишите так, используя конкатенацию:

$url = 'http://example.com/index.php/auth?&key=@13456&email='.$email.'&password='.$password;

б) поместите его в двойные кавычки:

$url = "http://example.com/index.php/auth?key=@13456&email=$email&password=$password";

(Фигурные скобки необязательны, если вы не интерполируете более сложное выражение, а не только одну переменную).

PS Несколько других дополнительных очков:

Вы должны учитывать потенциальные проблемы из-за URL-кодирования специальных символов в пароле (что приводит к потенциальной неверной интерпретации на удаленном сервере). На самом деле это должно быть сделано как запрос POST со значениями внутри тела запроса, а не с помощью запроса. Это также предотвратит утечку безопасности из-за веб-серверов и т.д., Которые будут посещать URL-адреса.

Вы также должны убедиться, что HTTP-запрос был определенно успешным, прежде чем предполагать, что вы можете обработать ответ.

  • 1
    Спасибо друг, это сработало

Ещё вопросы

Сообщество Overcoder
Наверх
Меню