在使用Dedecms CMS时,如果将PHP版本升级到7.x,可能会遇到一个问题:当更改内容模型中的 select、radio 或 checkbox 类型字段时,附加表无法正常更新。这会导致用户在修改文档时,选择的值总是还原为第一个选项。
这一问题的根本原因在于,从PHP 7开始,MYSQL_ASSOC不再作为一个有效的常量存在。因此,需要将MYSQL_ASSOC替换为MYSQLI_ASSOC来解决这个问题。
以下是两种解决方法:
第一种方法:修改数据库类型
进入网站后台,依次点击“系统” -> “系统基本参数” -> “核心设置”,将数据库类型从“mysql”改为“mysqli”。完成设置后保存即可。
第二种方法:修改代码
如果不想通过后台更改数据库类型,也可以直接修改代码。打开文件 /dede/mychannel_field_edit.php,找到大约88-91行的以下代码:
while($nrow = $dsql->GetArray('a', MYSQL_ASSOC))
{
$fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
}
将其修改为:
if(version_compare(PHP_VERSION, '7.0.0', '>='))
{
while($nrow = $dsql->GetArray('a', MYSQLI_ASSOC))
{
$fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
}
}
else
{
while($nrow = $dsql->GetArray('a', MYSQL_ASSOC))
{
$fields[ strtolower($nrow['Field']) ] = $nrow['Type'];
}
}
这样修改后,重新编辑并保存字段,问题即可得到解决。
通过以上两种方法之一,您可以轻松解决Dedecms在PHP 7环境下内容模型字段更新失败的问题。根据实际需求选择合适的方法进行操作即可。