利用 MySQL 执行数学运算实现简易在线计算器

江屿
江屿
发布时间:2026-10-15 | 2人浏览过
原创

本文介绍如何利用 MySQL 数据库引擎直接解析数学公式的特性,配合 PHP 和 jQuery 构建一个无需复杂算法的简易在线计算器。通过处理前端输入、转换中文符号、调用 SQL 计算并返回结果,实现快速的手写表达式计算功能。

核心原理

MySQL 的 SELECT 语句不仅用于查询数据,还支持直接执行数学表达式。例如执行 SELECT 1+1 会直接返回结果 2。利用这一特性,我们可以将用户输入的数学字符串拼接进 SQL 语句中,让数据库完成所有的计算工作,从而省去后端编写复杂解析器的步骤。

准备工作

  • 环境需求:安装好 MySQL 数据库和 PHP 运行环境。
  • 依赖库:需要引入 jQuery.js 以实现 AJAX 交互(文中示例使用旧版语法,现代开发建议使用 fetch API 或 Axios)。
  • 代码结构:主要涉及两个文件:jsq.php(前端界面与脚本)和 jsq1.php(后端计算接口)。

实现步骤

第1步:配置后端计算接口 (jsq1.php)

目的:接收前端传来的数学表达式,进行标准化处理后提交给 MySQL 计算。
入口:POST 请求至 jsq1.php,参数名为 t_ask。
动作:

  1. 连接数据库:使用 mysql_connect 连接本地数据库(注:生产环境请改用 PDO 或 MySQLi 并严格检查输入防注入)。
  2. 数据处理:
    - 去除首尾空格及换行符。
    - 将中文全角括号 ( ) 替换为英文半角括号 ( )。
    - 角度转换:MySQL 数学函数默认使用弧度制,需将输入的度数转换为弧度(乘以 pi()/180),并将反三角函数输出转回度数。
  3. 构造 SQL:将处理后的表达式拼接到 SELECT 语句后。
  4. 执行并返回:执行查询,若成功则输出结果;若失败则提示“你输入的式子有错误”。
<?php
// 注意:原文使用的是已废弃的 mysql_* 函数,实际部署建议升级
$db = mysql_connect("localhost", "root", "123");
header("Content-Type:text/html;charset=GB2312");

// 获取并预处理输入
$str = trim($_POST['t_ask']);
$str = str_replace(" ", "", str_replace("\r\n", "", $str));
$str = str_replace("(", "(", $str);
$str = str_replace(")", ")", $str);

// 三角函数:度转弧度
$str = preg_replace("/sin\((.*)\)/is", "sin(\\${1}*pi()/180)", $str);
$str = preg_replace("/cos\((.*)\)/is", "cos(\\${1}*pi()/180)", $str);
$str = preg_replace("/tan\((.*)\)/is", "tan(\\${1}*pi()/180)", $str);
$str = preg_replace("/cot\((.*)\)/is", "1/tan(\\${1}*pi()/180)", $str);

// 反三角函数:弧度转度
$str = preg_replace("/asin\((.*)\)/is", "asin(\\${1}/pi()*180)*180/pi()", $str);
$str = preg_replace("/acos\((.*)\)/is", "acos(\\${1}/pi()*180)*180/pi()", $str);
$str = preg_replace("/atan\((.*)\)/is", "atan(\\${1}/pi()*180)*180/pi()", $str);

$sql = "select " . $str;
$res = mysql_query($sql, $db) or die('<font color=red>你输入的式子有错误</font>');
$rs = mysql_fetch_array($res);
echo $rs[0];
?>

第2步:构建前端交互页面 (jsq.php)

目的:提供用户输入框,监听按键事件,自动调用后端接口显示结果。
入口:浏览器访问 jsq.php。
动作:

  1. HTML 结构:创建一个 textarea 用于输入表达式,一个 div id="res" 用于显示结果。
  2. JS 逻辑:绑定 #t_ask 的 keyup 事件。当用户输入时,通过 $.post 将内容发送至 jsq1.php,并将返回的数据填充到 #res 中。
<html>
<head>
<title>手写输入计算器</title>
<script src="jquery.js" language="javascript"></script>
<script language="javascript">
$(function(){
  $("#t_ask").keyup(function(){
    $.post(
      "jsq1.php",
      { t_ask : $("#t_ask").val() },
      function(data,textStatus){
        $("#res").html(data);
      }
    );
  });
});
</script>
</head>
<body>
<textarea name="t_ask" cols="60" rows="6" id="t_ask"></textarea>
<div id="res"></div>
</body>
</html>

支持的运算功能

根据 MySQL 内置函数,该计算器支持以下类型的运算:

  • 基础运算:加 +、减 -、乘 *、除 /、取模 %。
  • 三角函数:sin(), cos(), tan(), cot(),以及对应的反函数 asin(), acos(), atan()。
  • 其他数学函数:abs()(绝对值)、ceil()(向上取整)、floor()(向下取整,需手动拼写)、exp()(e的指数)、log()(自然对数)、pow()(幂运算)、sqrt()(平方根)。

注意事项与安全警告

本示例代码主要用于演示思路,存在严重的安全隐患和技术过时问题,请勿直接用于生产环境:

  1. SQL 注入风险:直接将用户输入拼接进 SQL 语句是极度危险的。恶意用户可能输入 ; DROP TABLE users; -- 等命令破坏数据库。必须对用户输入进行严格的白名单过滤或参数化预处理。
  2. 函数过时:mysql_connect 等函数已在 PHP 7.0 中被移除。新项目应使用 mysqli 或 PDO。
  3. 字符编码:示例中使用了 GB2312 编码,现代 Web 开发统一推荐使用 UTF-8。

以上就是利用 MySQL 执行数学运算实现简易在线计算器的详细内容,更多关于 AI 编程技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表