php 8.3 调用通义千问 api 并写入数据库的关键是:先用 curl 发起带认证的 json 请求获取响应,再通过 pdo 预处理语句安全存入 mysql;需注意 php 8.3 类型严格性、utf8mb4 字符集及 api 限流。

PHP 8.3 调用通义千问(Qwen)API 获取 AI 结果后,写入数据库的关键在于:先正确发起 HTTP 请求获取响应,再安全、结构化地存入 MySQL(或其他支持的数据库)。通义千问官方未提供 PHP SDK,需通过 REST API 调用;而 PHP 8.3 对 JSON、类型声明和错误处理更严格,需注意兼容性。
1. 准备工作:获取 API 接口与认证凭据
通义千问开放平台(dashscope.aliyun.com)申请 API Key,并确认使用的是 qwen-max、qwen-plus 或 qwen-turbo 等可用模型。接口地址为:
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation调用需在请求头中携带 Authorization: Bearer YOUR_API_KEY,并设置 Content-Type: application/json。
2. 使用 cURL 或 Guzzle 发起请求(PHP 8.3 推荐 cURL)
PHP 8.3 默认启用严格类型检查,建议显式声明变量类型,避免隐式转换报错。以下为精简可用示例(含错误处理):
// 假设已连接数据库 $pdo(见下一步)
$apiKey = 'sk-xxx'; // 替换为你的 DashScope API Key
$endpoint = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation';
<p>$data = [
'model' => 'qwen-turbo',
'input' => [
'messages' => [['role' => 'user', 'content' => '用一句话介绍PHP8.3的新特性']]
],
'parameters' => ['result_format' => 'text']
];</p><p>$options = [
CURLOPT_URL => $endpoint,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data, JSON_UNESCAPED_UNICODE),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json; charset=utf-8'
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30
];</p><p>$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);</p><p>if ($httpCode !== 200) {
throw new RuntimeException("API request failed: $httpCode");
}</p><p>$result = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE || !isset($result['output']['text'])) {
throw new RuntimeException('Invalid API response format');
}</p><p>$aiText = trim((string)$result['output']['text']); // 强制转 string 防 PHP 8.3 类型警告
</p>
3. 安全写入 MySQL 数据库(PDO + 预处理)
PHP 8.3 强烈推荐使用 PDO(非 mysqli),配合预处理语句防止 SQL 注入。确保表结构支持 UTF8MB4(兼容 emoji 和中文):
// 创建表示例(执行一次即可) -- CREATE TABLE ai_results ( -- id INT AUTO_INCREMENT PRIMARY KEY, -- prompt TEXT NOT NULL, -- response TEXT NOT NULL, -- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- model VARCHAR(32) DEFAULT 'qwen-turbo' -- ) CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
插入数据时使用参数绑定:
$prompt = '用一句话介绍PHP8.3的新特性';
$stmt = $pdo->prepare("INSERT INTO ai_results (prompt, response, model) VALUES (?, ?, ?)");
$stmt->execute([$prompt, $aiText, 'qwen-turbo']);
$lastId = $pdo->lastInsertId();
4. 注意事项与避坑点
- 通义千问返回内容可能含换行、引号、控制字符——入库前建议用 trim() + htmlspecialchars($text, ENT_QUOTES, 'UTF-8')(如需前端展示)或直接存储原始文本(推荐)
- PHP 8.3 中 json_decode() 默认返回 stdClass,务必加第二个参数 true 得到关联数组
- API 限流:免费版有 QPS 和总调用量限制,生产环境需加缓存(如 Redis)或重试逻辑
- 数据库连接需设置 PDO::ATTR_EMULATE_PREPARES => false 和 PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











