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

PHP调用Twilio API发送SMS时正文缺失MySQL存储的code值

问题根因

短信正文不携带code值是数据库查询逻辑缺失导致的:

  • 执行mysqli_query()后没有接收返回的查询结果集
  • 没有从结果集中读取数据行赋值给$row,直接调用$row['code']时$row是未定义状态,因此$sms为空值,最终拼接出来的短信正文自然没有凭证内容。
  • 代码没有添加数据库连接、SQL执行的错误校验,出现异常时无法快速定位问题。
修复后可运行代码
<?php
require __DIR__ . '/vendor/autoload.php';
use Twilio\Rest\Client;

// Twilio凭证生产环境建议存环境变量,不要硬编码
$account_sid = 'ACc9ff';
$auth_token = '7f1ffa';

// 建立数据库连接,增加连接错误判断
$connect = mysqli_connect("localhost", "jk47531_voucher", "Mmmm0;4", "u825147531_voucher");
if (!$connect) {
    exit("数据库连接失败:" . mysqli_connect_error());
}

$sql = "SELECT code FROM plan50 ORDER BY RAND() LIMIT 1";
$result = mysqli_query($connect, $sql);
// 增加SQL执行错误判断
if (!$result) {
    exit("凭证查询失败:" . mysqli_error($connect));
}
// 从结果集中读取一行数据
$row = mysqli_fetch_assoc($result);
$sms = $row['code'] ?? '';
mysqli_free_result($result);

// 如果凭证为一次性使用,在此处添加UPDATE语句,将当前取出的code标记为已发放,避免重复发送给不同用户

$twilio_number = "+18647963358";
$client = new Client($account_sid, $auth_token);
// 增加空code判断,避免发送无效短信
if (empty($sms)) {
    exit("无可用凭证码,终止发信");
}
$client->messages->create(
    '+25XXXXXXXXXX',
    [
        'from' => $twilio_number,
        'body' => "your Voucher code is $sms"
    ]
);
优化建议
  • 生产环境不要把数据库账号密码、Twilio认证信息硬编码在代码中,建议通过环境变量读取这类敏感配置,降低泄露风险
  • 若plan50表中存储的是一次性使用的兑换码,取码后必须更新对应记录的状态为已使用,否则高并发场景下会出现同一个码发给多个用户的问题
  • 建议在发信逻辑前增加凭证非空校验,避免把无有效凭证的短信发给客户,影响用户体验

内容的提问来源于stack exchange,提问作者moses musyoki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:18:17