You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数据库表中存储公式并作为PHP变量执行数学运算

实现方案

你当前的问题是从数据库取出的公式是字符串格式,PHP不会自动解析其中的变量并执行运算,需要额外的逻辑处理来得到计算结果。

方案1:使用eval直接执行表达式(仅适用于公式来源完全可信的场景)

修改代码如下:

<?php
    include '../../db.php';
    $a = 50;
    $b = 20;
    $c = 30;
    $fq = $conn->query("SELECT * FROM `test`");
    $fdata = $fq->fetch_array();
    $formula = $fdata['formula'];
    // eval执行表达式,注意拼接语法正确性
    eval("\$output = {$formula};");
    echo $output;
?>

注意:eval函数会执行传入的任意PHP代码,如果数据库中的公式可以被不可信用户修改,会出现远程代码执行漏洞,严重威胁服务器安全,仅在完全可控的环境下使用该方案。

方案2:更安全的变量替换+表达式计算

如果需要开放公式修改权限给普通用户,建议不要直接存储PHP变量格式的表达式,改为存储纯数学表达式(例如存储a+b-c而非$a+$b-$c),通过变量映射替换后再计算,大幅降低安全风险:

<?php
    include '../../db.php';
    // 建立变量映射关系
    $varMap = [
        'a' => 50,
        'b' => 20,
        'c' => 30
    ];
    $fq = $conn->query("SELECT * FROM `test`");
    $fdata = $fq->fetch_array();
    // 数据库存储的公式为a+b-c
    $formula = $fdata['formula'];
    // 替换公式中的变量为实际数值
    $calcFormula = str_replace(array_keys($varMap), array_values($varMap), $formula);
    // 校验公式仅包含数字和合法运算符号后再执行计算
    if(preg_match('/^[\d\+\-\*\/\(\)\.]+$/', $calcFormula)) {
        eval("\$output = {$calcFormula};");
        echo $output;
    } else {
        echo "公式非法";
    }
?>

内容的提问来源于stack exchange,提问作者Vishal Vishwakarma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:15:05