环境: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并强制执行该问题,那么它将起作用,但是我不能为每个客户端站点都这样做,也不能期望客户端自己做。

这是一个错误吗?有解决方法吗?还是我很胖?

最佳答案

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

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


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

顺便说一句,更改db.xml文件后,您需要通过以下方式更新模式:转到“仪表板”->“添加功能”,单击所讨论的块旁边的“编辑”,然后单击“刷新”按钮。

08-25 15:04