问题描述
|
环境: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 ...\',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文件后,您需要通过以下方式更新架构:转到“仪表板”->“添加功能”,单击所讨论的块旁边的“编辑”,然后单击“刷新”按钮。
,问题似乎是Concrete5的。我刚刚使用MySQLInstanceConfig.exe从“对多语言的最佳支持”(我一开始想要的)更改为“标准字符集”。这会将字符集从utf8转换为Latin1。进行此更改后,刷新将在bID上创建一个PRIMARY密钥。
另外,这是MySQL 5.1的问题,可能已在5.5中修复。尚未尝试。