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

MySQL 8.0迁移后mysqli_stmt_execute()执行异常求助

MySQL 8.0迁移后PHP 7.4中mysqli_stmt_execute()异常问题

问题背景

主机服务商Siteground将MySQL从5.7版本迁移至8.0版本后,PHP 7.4环境下的部分代码无法正常运行,核心问题出在mysqli_stmt_execute()调用——该函数现在会抛出异常。

原代码(MySQL 5.7下运行正常)

if (!mysqli_stmt_execute($stmt))
{
  error_log("mysql error: " . mysqli_error($mysqli));
  error_log("prep_bind_exec_2(): mysqli_stmt_execute returned false");
  return false;
} 

升级后抛出的异常

Incorrect arguments to mysqld_stmt_execute in 
Stack trace:
mysqli_stmt_execute(Object(mysqli_stmt))
prep_bind_exec_2(Object(mysqli), '  SELECT DISTIN...', 'ssssssdd', '2', '1', '2', '3', '4', '4', 0, 1000000000)

尝试的修改及结果

查阅PHP文档得知,mysqli_stmt_execute()的第二个可选$params参数仅在PHP 8.1及以上版本支持,但我尝试修改代码如下:

if (!mysqli_stmt_execute($stmt, ['2','1','2','3','4','4','0','1000000000']))
{
  error_log("mysql error: " . mysqli_error($mysqli));
  error_log("prep_bind_exec_2(): mysqli_stmt_execute returned false");
  return false;
}

修改后,mysqli_stmt_execute()返回false,但mysqli_error()返回空字符串。

对应的SQL语句

SELECT DISTINCT CONTACT.contact_id, CONTACT.address_region, CONTACT.cost_to_request
FROM CONTACT 
LEFT JOIN STAKEHOLDER       ON CONTACT.contact_id = STAKEHOLDER.contact_id 
LEFT JOIN PRODUCT_RANGE     ON CONTACT.contact_id = PRODUCT_RANGE.contact_id 
LEFT JOIN CAPABILITY        ON CONTACT.contact_id = CAPABILITY.contact_id  
LEFT JOIN PRODUCT_FEATURE   ON CONTACT.contact_id = PRODUCT_FEATURE.contact_id 
WHERE 
CONTACT.active = '1'
AND STAKEHOLDER.role_id IN (?)  
AND CAPABILITY.technology_id IN (?,?,?,?) 
AND PRODUCT_RANGE.product_type_id IN (?)
LIMIT ?,?

绑定参数

params=["2","1","2","3","4","4",0,1000000000]

请问我哪里操作有误?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:16:09