如何在数据库中存储作为POST传递的多个参数

时间:2013-07-23 10:24:14

标签: php mysql json

我已经通过POST传递了JSON编码参数,我们已经在另一个PHP文件中捕获并解码了这些参数。我使用以下代码来做到这一点。

$entityBody = file_get_contents('php://input');
$entityBody = json_decode($entityBody, true);

我已经传递了JSON编码参数,如下所示:

{
 "id": "5",
 "name": "abcd",
 "imei": "1234"
}

实际上我通过POST传递的参数数量可能是15到20,我将在表中插入,即每个参数都是mysql数据库中表中的一个字段。我是JSON和PHP的新手。我知道的方法是在检查每个参数是否设置如下后获取每个参数的值:

if(isset($entityBody['id']))
   ...
elseif(isset(...))
   ...

很明显,当有很多参数时会有很多if和else。那么有什么方法可以让我以更有效的方式将参数存储在表中。如果有人帮助我这样做,我将非常感激。

2 个答案:

答案 0 :(得分:1)

使用json_decode函数将json解析为数组或对象。

$a = json_decode($entityBody);
$a->id;

参考http://php.net/manual/en/function.json-decode.php

答案 1 :(得分:0)

如果你正在使用准备好的陈述,你可以做这样的事情。请注意,您应该考虑如何实现这样的方法,并根据您的需要进行更改。

$json = '{"id": "5","name": "abcd","imei": "1234"}';
$array = json_decode($json, true);

if (!count($array) > 0) {
  throw new Exception('No params set.');
}

$allowedKeys = array('id','name','imei'); // could be hard coded, or something like: SELECT * FROM yourdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = yourtable

$queryParams = array();
foreach ($array as $key => $value) {
  if (in_array($key, $allowedKeys)) {
    $queryParams['keys'][] = $key;
    $queryParams['values'][] = $value;
  }
}

print_r($queryParams);
$query = 'INSERT INTO yourtable (' . implode(', ', $queryParams['keys']) . ') VALUES (?' . str_repeat(',?', count($queryParams['values'])-1) . ')';
print_r($query); // INSERT INTO yourtable (id, name, imei) VALUES (?,?,?)

然后你可以用$ queryParams ['values']作为值来执行它:) 但是,如果您使用自动增量,则无需插入“id”,它可能最终会出现一些奇怪的错误。