Указатель базы данных Concrete5 указан в db.xml, но не «принимает».Как мне заставить это работать? - PullRequest
0 голосов
/ 26 мая 2011

Среда: 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 и форсирую проблему, это работает, но я не могу сделать это для каждого клиентского сайта и не могу ожидать, что клиенты сделают это сами.

Это ошибка? Есть ли обходной путь? Или я просто толстый?

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

Поле bID для блока необходимо объявить как неподписанный ключ, но не как первичный и не автоинкрементный:

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

Не уверен, почему он не может быть первичным, но определенно не может бытьавтоинкремент, потому что bID назначается системой Concrete5 и изменяется каждый раз, когда блок обновляется (из-за системы управления версиями).

Кстати, после изменения файла db.xml вам необходимо обновитьперейдите в Dashboard -> Add Functionality, нажмите «Edit» рядом с соответствующим блоком, затем нажмите кнопку «Refresh».

0 голосов
/ 26 мая 2011

Проблема, похоже, в Concrete5.Я только что использовал MySQLInstanceConfig.exe, чтобы изменить «Лучшая поддержка многоязычия» (то, что я хотел в первую очередь) на «Стандартный набор символов».Это берет набор символов от utf8 до Latin1.После этого изменения Refresh создает ключ PRIMARY для bID.

В качестве альтернативы это проблема MySQL 5.1, которая может быть исправлена ​​в 5.5.Я еще попробую.

...