我尝试从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调用一样动态创建它时,它将不会记录在系统上。
你们可以建议怎么做吗?
答案 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请求是否确实成功。