0

环境:Windows7、IIS7、MySQL 5.1.57、Concrete5 5.4.1.1

当我放置自定义块时,我收到了这个相当奇怪的错误消息:

Fatal error: Uncaught exception 'ADODB_Exception' with message 'mysql error: [-1: No primary key found for table btCtL] in BlockRecord::UpdateActiveTable(0, 0) ' in C:\inetpub\wwwroot\Concrete5\concrete\libraries\3rdparty\adodb\adodb-exceptions.inc.php:78 Stack trace: #0 
C:\inetpub\wwwroot\Concrete5\concrete\libraries\3rdparty\adodb\adodb-active-record.inc.php(494): adodb_throw('mysql', 'BlockRecord::Up...', -1, 'No primary key ...', 0, 0, Object(ADODB_mysql)) #1 
C:\inetpub\wwwroot\Concrete5\concrete\libraries\3rdparty\adodb\adodb-active-record.inc.php(402): ADODB_Active_Record->Error('No primary key ...', 'UpdateActiveTab...') #2 
C:\inetpub\wwwroot\Concrete5\concrete\libraries\3rdparty\adodb\adodb-active-record.inc.php(136): ADODB_Active_Record->UpdateActiveTable(false) #3 
C:\inetpub\wwwroot\Concrete5\concrete\libraries\block_view.php(30): ADODB_Active_Record->__construct('btCtL') #4 
C:\inetpub\wwwroot\Concrete5\concrete\libraries\block_controller.php(222): BlockRecord->__construct('btCtL') #5 
C:\inetpub\wwwroot\Concrete in C:\inetpub\wwwroot\Concrete5\concrete\libraries\3rdparty\adodb\adodb-exceptions.inc.php on line 78 

在这种情况下 db.xml 读取

<?xml version="1.0"?>
<schema version="0.3">
<table name="btCtL">
    <field name="bID" type="I">
    <unsigned />
    <key />      
    </field>
    <field name="Number_1" type="C" size="12"></field>
    <field name="Number_2" type="C" size="12"></field>
    <field name="Number_3" type="C" size="12"></field>
    <field name="Number_4" type="C" size="12"></field>
    <field name="Number_5" type="C" size="12"></field>
    <field name="Number_6" type="C" size="12"></field>
    <field name="Number_7" type="C" size="12"></field>
    <field name="Number_8" type="C" size="12"></field>
    <field name="Number_9" type="C" size="12"></field>
    <field name="Number_10" type="C" size="12"></field>
</table>
</schema>

该错误与“找不到表 btCtL 的主键”有关,这显然是错误的。如果我进入 phpAdmin 并强制解决问题,它可以工作,但我不能为每个客户站点都这样做,我也不能指望客户自己做。

这是一个错误吗?有解决方法吗?还是我只是厚?

4

2 回答 2

2

块的 bID 字段需要声明为无符号密钥,但不是主密钥,也不是自动增量:

<field name="bID" type="I"><KEY /><UNSIGNED /></field>

不知道为什么它不能是主要的,但绝对不能是自动增量的,因为 bID 是由 Concrete5 系统分配的,并且每次更新块时都会更改(因为版本控制系统)。

顺便说一句,更改 db.xml 文件后,您需要通过转到仪表板 -> 添加功能来更新架构,单击相关块旁边的“编辑”,然后单击“刷新”按钮。

于 2011-05-26T05:54:57.523 回答
0

问题似乎是 Concrete5 的问题。我刚刚使用 MySQLInstanceConfig.exe 将“对多语言的最佳支持”(我最初想要的)更改为“标准字符集”。这会将字符集从 utf8 转换为 Latin1。在此更改之后,刷新会在 bID 上创建一个主键。

或者,这是 MySQL 5.1 的问题,可能已在 5.5 中修复。我还没有尝试一下。

于 2011-05-26T06:33:14.737 回答