利用 MySQL 执行数学运算实现简易在线计算器
本文介绍如何利用 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。
动作:
- 连接数据库:使用
mysql_connect连接本地数据库(注:生产环境请改用 PDO 或 MySQLi 并严格检查输入防注入)。 - 数据处理:
- 去除首尾空格及换行符。
- 将中文全角括号()替换为英文半角括号()。
- 角度转换:MySQL 数学函数默认使用弧度制,需将输入的度数转换为弧度(乘以pi()/180),并将反三角函数输出转回度数。 - 构造 SQL:将处理后的表达式拼接到
SELECT语句后。 - 执行并返回:执行查询,若成功则输出结果;若失败则提示“你输入的式子有错误”。
<?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。
动作:
- HTML 结构:创建一个 textarea 用于输入表达式,一个 div id="res" 用于显示结果。
- 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()(平方根)。
注意事项与安全警告
本示例代码主要用于演示思路,存在严重的安全隐患和技术过时问题,请勿直接用于生产环境:
- SQL 注入风险:直接将用户输入拼接进 SQL 语句是极度危险的。恶意用户可能输入
; DROP TABLE users; --等命令破坏数据库。必须对用户输入进行严格的白名单过滤或参数化预处理。 - 函数过时:
mysql_connect等函数已在 PHP 7.0 中被移除。新项目应使用mysqli或PDO。 - 字符编码:示例中使用了 GB2312 编码,现代 Web 开发统一推荐使用 UTF-8。
以上就是利用 MySQL 执行数学运算实现简易在线计算器的详细内容,更多关于 AI 编程技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













