必须使用SAE预定义常量(如SAE_MYSQL_HOST_M、SAE_MYSQL_USER等)连接数据库,禁止硬编码地址或密码;数据库名固定为app_应用名,不可创建或切换数据库;禁用已废弃的mysql_*函数,推荐mysqli或PDO。

直接用预定义常量,别手填地址和密码——SAE 环境下硬编码 SAE_MYSQL_HOST_M、SAE_MYSQL_USER 这些值会失效,但用常量本身是安全且必须的。
必须用 SAE 预定义常量,不能写死连接参数
新浪云(SAE)在 PHP 运行环境中自动注入了一组全局常量,比如 SAE_MYSQL_HOST_M、SAE_MYSQL_USER、SAE_MYSQL_PASS、SAE_MYSQL_DB、SAE_MYSQL_PORT。这些值每次部署可能变化,且不对外暴露真实 IP 或端口细节。
常见错误是把本地调试时写的 "localhost" 或 "w.rdc.sae.sina.com.cn:3306" 直接搬上去,结果连不上,报错类似 Connection refused 或 Access denied。
- ✅ 正确写法(以
mysqli为例):$conn = new mysqli(SAE_MYSQL_HOST_M, SAE_MYSQL_USER, SAE_MYSQL_PASS, SAE_MYSQL_DB, SAE_MYSQL_PORT); - ❌ 错误写法:
$conn = new mysqli("localhost", "root", "", "test");或mysql_connect("w.rdc.sae.sina.com.cn:3306", ...) - PDO 同理,DSN 中不能拼接
host:port字符串,得拆开传参:$pdo = new PDO("mysql:host=" . SAE_MYSQL_HOST_M . ";dbname=" . SAE_MYSQL_DB . ";port=" . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS);
数据库名固定为 app_应用名,不能建库也不能改名
你在 SAE 控制台创建 MySQL 实例后,系统自动分配一个数据库,名字格式是 app_你的应用名(如应用叫 myblog,库名就是 app_myblog)。这个库名由常量 SAE_MYSQL_DB 提供,你不能用 CREATE DATABASE,也不该手动 mysql_select_db("xxx") 换库。
立即学习“PHP免费学习笔记(深入)”;
本地开发时习惯先 CREATE DATABASE test; 再导入 SQL,这种语句必须删掉,否则部署后会报错 Access denied for CREATE command。
- 导入数据时,SQL 文件里所有
USE xxx;和CREATE DATABASE行都得删干净 - 表结构导入前,确保
CREATE TABLE语句没带库名前缀(比如不要写CREATE TABLE app_myblog.users,只写CREATE TABLE users) - 如果用 phpMyAdmin 导出,选“自定义”,取消勾选 “Add CREATE DATABASE / DROP DATABASE”
注意 mysqli 和 mysql 扩展已废弃,别用 mysql_* 函数
SAE 支持 mysqli 和 PDO,但官方文档里还留着过时的 mysql_connect() 示例——那是 PHP 5.4 以前的函数,PHP 7+ 已彻底移除,SAE 当前环境(PHP 5.6+)也禁用了它。
如果你照抄老博客里的 mysql_connect(...),页面会直接白屏或报 Fatal error: Uncaught Error: Call to undefined function mysql_connect()。
- ✅ 用
mysqli面向对象方式(推荐):$conn = new mysqli(SAE_MYSQL_HOST_M, SAE_MYSQL_USER, SAE_MYSQL_PASS, SAE_MYSQL_DB, SAE_MYSQL_PORT); - ✅ 用
PDO(更安全,支持预处理):$pdo = new PDO("mysql:host=" . SAE_MYSQL_HOST_M . ";dbname=" . SAE_MYSQL_DB . ";port=" . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); - ❌ 别用:
mysql_connect()、mysql_select_db()、mysql_query()
最易被忽略的一点:SAE 的 MySQL 是共享型服务,主从分离,SAE_MYSQL_HOST_M 是主库(用于写),SAE_MYSQL_HOST_S 是从库(用于读)。如果应用有高并发读需求,得自己分流;但绝大多数小项目只连主库就够了——别图省事全用从库,否则写操作会失败。



















