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

从Sybase数据库批量发送短信时遇PHP警告问题求助

解决sybase_num_rows()参数为布尔值的警告问题

这个警告的核心原因是sybase_query()执行SQL失败,返回了布尔值false,而sybase_num_rows()需要传入有效的查询结果资源。下面是具体的排查和修复步骤:

1. 修复SQL语句的语法错误

你的SQL里postdate=$strdate存在潜在问题:如果postdate是日期/字符串类型,变量需要用单引号包裹,否则会触发SQL语法错误,导致查询失败。修改后的SQL应该是:

$sql = "select itbid from phoenix..itranlog3 a where postdate='$strdate' and itbid not in (select batch_id from phoenix..sms_batch_alert_control where batch_id=a.itbid)";
$q = sybase_query($sql);

如果不确定SQL是否正确,可以先把$sql的值打印出来,复制到Sybase客户端手动执行,验证语法和结果是否符合预期。

2. 添加错误捕获逻辑

在调用sybase_query()后立即检查返回值,一旦查询失败就输出错误信息,方便定位问题:

$q = sybase_query($sql);
if (!$q) {
    die('SQL执行失败: ' . sybase_get_last_message());
}

sybase_get_last_message()会返回Sybase数据库的具体错误信息,比如表不存在、权限不足、字段名拼写错误等。

3. 规避SQL注入风险

直接将变量拼接到SQL中存在注入漏洞,建议对变量做转义处理:

$safe_strdate = sybase_escape_string($strdate);
$sql = "select itbid from phoenix..itranlog3 a where postdate='$safe_strdate' and itbid not in (select batch_id from phoenix..sms_batch_alert_control where batch_id=a.itbid)";

4. 优化批量ID获取逻辑

你可以不用先调用sybase_num_rows()做判断,直接循环读取结果,当sybase_fetch_assoc()返回false时会自动终止循环:

$batch_id = [];
if ($q) {
    while($row = sybase_fetch_assoc($q)) {
        $batch_id[] = $row['itbid'];
    }
}
// 后续使用$batch_id数组进行短信发送逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:03:21