从JSON向mysql插入记录

时间:2018-02-21 11:32:35

标签: php mysql json

我尝试从JSON向MySQL DB插入记录。我这样做了:

// 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":"jhon@mail.com","password":"%4fksdhj*"}

如果在api调用中我直接写了电子邮件dan密码值,则将记录插入到DB中,但是当我像上面的API调用一样动态创建它时,它将不会记录在系统上。

你们可以建议怎么做吗?

1 个答案:

答案 0 :(得分:0)

我相信您的代码没有正确读取参数值,因为您的字符串是单引号(')。当字符串在双引号(")内时,PHP仅插入变量。

所以你可以

a)使用连接写这样:

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

b)用双引号括起来:

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

(花括号是可选的,除非您重新插入比单个变量更复杂的表达式。)

P.S。其他几点:

您应该考虑由于密码中特殊字符的URL编码而导致问题的可能性(导致远程服务器上可能存在错误解释)。实际上,这应该作为POST请求来完成,其中包含请求体内的值,而不是查询字符串。这还可以防止因访问的Web服务器等日志记录URL而导致的安全漏洞。

在假设您可以处理响应之前,您还应该检查HTTP请求是否确实成功。