0

我已经通过 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。那么有什么方法可以让我以更有效的方式将参数存储在表中。如果有人帮助我这样做,我将不胜感激。

4

2 回答 2

1

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

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

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

于 2013-07-23T10:28:09.833 回答
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”,它可能会导致一些奇怪的错误。

于 2013-07-23T10:52:53.150 回答