我在处理数据库方面不是很有经验.
我有一个Android应用程序,应该发送查询并从远程数据库服务器(MySQL)获取后续结果集.
我通过实际以JSON的形式将查询发送到服务器来完成此操作.然后,服务器脚本(PHP)将获取查询并执行它.然后将结果集再次解析为JSON并发送回Android应用程序.
我的PHP脚本
function run_query(mysqli $con, $query){
$res=$con->query($query);
return $res;
}
$reply = array();
if(isset($_POST['json'])) {
require_once __DIR__.'/config.php';
require_once __DIR__.'/DbController.php';
$json = json_decode($_POST['json'], true);
$query = $json['query'];
$con = (new DbController())->connect(DBNAME);
if(!$con){
$reply['suc']=false;
$reply['err_msg']=$con->error;
}
else{
$res = run_query($con, $query);
if(gettype($res)=="boolean"){
$reply['query_reply']=$res;
$reply['suc']=true;
die(json_encode($reply));
}
$i=0;
$reply['query_reply']= array();
while($row = $res->fetch_row()){
$reply['query_reply'][$i] = array();
for($j=0;$j<sizeof($row);$j++)
$reply['query_reply'][$i][$j]=$row[$j];
$i++;
}
$reply['suc']=true;
}
echo json_encode($reply);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,'query'密钥包含MySQL服务器执行的整个查询字符串.
我的问题是 - 这种方式是否包含我不知道的任何安全(或其他)漏洞?另外,有更好的方法吗?
我的一个项目伙伴建议我将查询分成不同的部分(Like-"query_type":"SELECT","table_name":"LOGIN_TABLE","where_args":"WHERE x = x",依此类推)并将其发送到服务器,然后在那里重建查询并执行.
但是,我不明白这会有什么帮助.任何建议将不胜感激.先感谢您.
我在网上考试中发现了这个问题.这是代码:
#include <stdio.h>
int main(void) {
int demo();
demo();
(*demo)();
return 0;
}
int demo(){
printf("Morning");
}
Run Code Online (Sandbox Code Playgroud)
我在测试后看到了答案.这就是答案:
MorningMorning
Run Code Online (Sandbox Code Playgroud)
我看了解释,但不明白为什么这就是答案.我的意思是,这条线不应该int demo();引起任何"问题"吗?
任何解释都有帮助.谢谢.