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

XAMPP 8.0运行Python CGI脚本报mysql模块缺失错误

修复Windows10+XAMPP8.0环境下Python CGI报No module named 'mysql'错误

问题复现场景

  • 部署环境:Windows 10、XAMPP 8.0
  • 实现逻辑:HTML表单提交POST数据到Python CGI脚本,脚本接收参数后写入MySQL的employee库register表
  • 异常表现:提交表单后页面无输出(空白),查看Apache error.log 报错 ModuleNotFoundError: No module named 'mysql'

对应HTML表单代码

<body>
<form method='post' action='dump.py' >
Name:<input type='text' name='name' /><br/>
Age:<input type='text' name='age' /><br/>
Phone:<input type='text' name='phone' /><br/>
Emailid:<input type='text' name='email' /><br/>
<input type='submit' value='Save'>
</form>
</body>

对应Python CGI脚本代码

#!C:\Users\Development\AppData\Local\Programs\Python\Python310\python.exe 
import cgi
import mysql.connector
print("Content-type:text/html\r\n\r\n")
form = cgi.FieldStorage()
name = form.getvalue("name")
age  = form.getvalue("age")
phone = form.getvalue("phone")
email = form.getvalue("email")

try:
    mysql_connection=mysql.connector.connect(host="localhost", user='root', password='', database='employee')
    mysql_handler=mysql_connection.cursor()
    mysql_query="insert into register (name,age,phone,emailid) values('{0}',{1},{2},'{3}')".format(name,age,phone,email)
    mysql_handler.execute(mysql_query)
    if(mysql_handler.rowcount >= 1):
       mysql_connection.commit()
       print("Record Inserted")
    mysql_connection.close()
except:
    mysql_connection.rollback()
    print("Error occured")

根因

报错核心是脚本首行shebang指定的Python解释器(C:\Users\Development\AppData\Local\Programs\Python\Python310\python.exe)环境中,未安装MySQL官方Python驱动mysql-connector-python。多数情况下是装包时调用了其他版本的Python/pip,导致包装到了别的解释器目录下,当前脚本调用的解释器找不到对应模块。

修复步骤

  • 打开CMD命令行,直接调用对应路径的Python解释器执行安装,避免装错环境:
C:\Users\Development\AppData\Local\Programs\Python\Python310\python.exe -m pip install mysql-connector-python
  • 安装完成后执行校验命令,确认包已安装到目标解释器:
C:\Users\Development\AppData\Local\Programs\Python\Python310\python.exe -c "import mysql.connector; print('driver ok')"

命令输出driver ok即表示驱动安装正确。

  • 重启XAMPP的Apache服务,重新提交表单测试即可。

额外优化建议

  • 当前代码用字符串拼接生成SQL存在SQL注入风险,替换为参数化查询即可修复:
# 替换原有SQL拼接逻辑
mysql_query = "insert into register (name,age,phone,emailid) values(%s, %s, %s, %s)"
mysql_handler.execute(mysql_query, (name, age, phone, email))
  • 现有异常捕获逻辑存在隐患:如果数据库连接初始化失败,mysql_connection对象未创建,直接调用rollback()会触发二次错误,建议拆分异常捕获逻辑,增加连接状态判断。

内容的提问来源于stack exchange,提问作者hithin chandran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:57:43