如何在PHP查询语句中拼接JavaScript变量sup_id
解决JS变量传入PHP查询的问题
你当前的写法行不通——PHP是服务器端先执行,JS是页面加载后在客户端运行,当JS拿到sup_id时,PHP代码早就执行完毕并输出到前端了,没法直接把JS变量塞进PHP的SQL查询里。下面给你两种可行的解决方案:
方案1:用AJAX异步请求后端接口
前端通过AJAX把sup_id传给后端PHP文件,由后端执行查询后返回结果:
let sup_id = $(this).val(); // 发送请求到后端处理文件 $.ajax({ url: 'get_lead_time.php', type: 'GET', data: { supplier_id: sup_id }, success: function(response) { // 拿到后端返回的lead time,赋值给sup变量 let sup = response; // 这里写拿到数据后的业务逻辑 }, error: function() { console.log('请求供应商数据失败'); } });
对应的后端get_lead_time.php代码(注意用预处理语句防SQL注入):
<?php // 假设$conn是已初始化的数据库连接 $supplier_id = $_GET['supplier_id']; // 预处理查询避免注入 $stmt = $conn->prepare("SELECT supplier_lead_time FROM `supplier_list` WHERE id=?"); $stmt->bind_param("i", $supplier_id); // "i"表示参数为整数类型 $stmt->execute(); $result = $stmt->get_result(); $lead_time = $result->fetch_array()[0]; echo $lead_time; $stmt->close(); ?>
方案2:提前加载所有供应商数据到JS对象
如果供应商数据量不大,可以在页面加载时用PHP把所有供应商的ID和lead time输出到JS对象中,后续直接用JS变量取值,无需额外请求:
<?php // 提前查询所有供应商数据 $result = $conn->query("SELECT id, supplier_lead_time FROM `supplier_list`"); $supplier_map = []; while ($row = $result->fetch_assoc()) { $supplier_map[$row['id']] = $row['supplier_lead_time']; } ?>
前端JS部分:
// 把PHP数组转成JS对象 const supplierLeadTimes = <?php echo json_encode($supplier_map); ?>; // 拿到sup_id后直接取值 let sup_id = $(this).val(); let sup = supplierLeadTimes[sup_id];
注意:无论用哪种方案,都要重视SQL注入风险,方案1的预处理语句、方案2的提前批量查询,都是安全的实现方式。
内容的提问来源于stack exchange,提问作者Raine Sabile
相关产品推荐
相关产品推荐

