作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是编码的新手,我遇到过需要将 JSON 转换为 SQLi 查询但无法完成所需的情况。
我正在尝试找到一种从 url 获取参数的方法,并基于它们使用通用函数从我的数据库中插入、更新、删除或选择。
JSON INSERT:
{"Username":"MyEmail@email.com","Password":"329670c3265b6ccd392e622733e9772f"}
JSON UPDATE:
{"Username":"MyEmail@email.com","Password":"newpacd392worda12123sdw112asddww"}
上述 JSON 是从检查 URL 查询字符串并将其转换为 JSON 的函数中检索的
function php_raw_query() {
$raw = filter_input(INPUT_SERVER, 'QUERY_STRING', FILTER_SANITIZE_STRING);
$arr = array();
$pairs = explode('&', $raw);
foreach ($pairs as $i) {
if (!empty($i)) {
list($name, $value) = explode('=', $i, 2);
if(isset($arr[$name])){
if (is_array($arr[$name])){
$arr[$name][] = $value;
}
else {
$arr[$name] = array($arr[$name], $value);
}
}
else {
$arr[$name] = $value;
}
}
}
return $arr;
}
$json = json_encode(php_raw_query());
完成后,我需要根据传递的数据建立一个变量查询,例如,如果我有 USER 和 PASS,我可以登录、注册、请求更改或删除。
考虑到这一点,用户可以执行:
SELECT * FROM 'users' WHERE 'Username'='MyEmail@email.com' AND 'Password'='329670c3265b6ccd392e622733e9772f';
请注意,列名 (Username) 和值 (MyEmail@email.com) 分别取自 JSON Key、Value,并且仅当 JSON 数组具有超过 1 个元素时才包含 AND 语句。
这能实现吗?
最佳答案
应该对你有帮助
$object = json_decode('{"Username":"MyEmail@email.com","Password":"329670c3265b6ccd392e622733e9772f"}');
function generate($object) {
$query = 'SELECT * FROM table WHERE ';
$paramsArray = [];
foreach ($object as $key => $value) {
$paramsArray[] = "'$key' = '$value'";
}
return $query . implode(' AND ', $paramsArray) . ";";
}
echo generate($object);
但是以这种方式准备查询是不安全的。看https://pl.wikipedia.org/wiki/SQL_injection
关于php - 如何将 JSON 转换为 SQL 查询 - php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31154725/
我是一名优秀的程序员,十分优秀!