如何将AngularJS传递的SQL指定值获取到PHP文件中并实现无WHERE动态筛选
方案1:直接解析传入的SQL提取目标值
如果必须从AngularJS传递的SQL语句中取值,可以用正则动态匹配目标字段的取值,不需要用到WHERE子句,适配简单结构的SQL场景:
// 接收AngularJS传递的SQL语句,这里以POST请求为例 $inputSql = file_get_contents('php://input'); // 配置你要提取的目标字段,可动态修改 $targetField = 'orderAmt'; // 正则匹配字段对应的值,兼容带单引号、双引号、无引号的数字取值 preg_match("/{$targetField}\s*=\s*['\"]?([^'\"]+)['\"]?/i", $inputSql, $matches); $extractedValue = $matches[1] ?? ''; // 代入你的业务数组 $data = [ 'merchantId' => 'M100003360', // 替换为实际商户ID 'qrCode' => '968566222112615382', 'curType' => 'RM', 'notifyURL' => 'https://google.com/', 'merOrderNo' => uniqid(), 'goodsName' => '', 'orderAmt' => $extractedValue, 'remark' => '', 'transactionType' => '1', ]; $data = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
注意:该方案仅适合结构固定的简单SQL,若存在子查询、同名字段、复杂计算逻辑可能出现匹配偏差。
方案2:更稳妥的结构化传参实现动态筛选(推荐)
直接传递SQL到后端存在极高的SQL注入风险,更推荐调整传参逻辑,让AngularJS端传递结构化的筛选参数数组,PHP直接取对应值即可,天然支持动态筛选:
- AngularJS端请求示例:
$http.post('你的PHP接口地址', { // 所有筛选参数封装成对象传递,可动态增减字段 filterParams: { merchantId: 'M100003360', orderAmt: '99.99', goodsName: '测试商品' } })
- PHP端取值示例:
$inputData = json_decode(file_get_contents('php://input'), true); $filterParams = $inputData['filterParams'] ?? []; // 动态提取任意需要的字段即可 $orderAmt = $filterParams['orderAmt'] ?? '';
内容的提问来源于stack exchange,提问作者random
相关产品推荐
相关产品推荐

