Нужна помощь от знактоков Wordpress + MYSQL

Sly32
На сайте с 29.03.2012
Offline
303
549

Написал себе простенький плагинчик для создания тестов/опросов под WP/ Но столкнулся с непонятной мне проблемой. При инициализации плагина Создание и заполнение нужных таблиц происходит частично. Вот код:


function install_my_tests() {
global $wpdb;
global $my_tests_version;
require_once(ABSPATH . 'wp-load.php');
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$sql = "
CREATE TABLE IF NOT EXISTS `test_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pub_date` date NOT NULL,
`t_name` varchar(255) NOT NULL,
`test_content` varchar(255) NOT NULL,
`count` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `test_name` (`id`, `pub_date`, `t_name`, `test_content`, `count`) VALUES
(1, '2015-04-29', 'Викторина «Биография Д.И. Менделеева»', '', 8);
";
dbDelta($sql);
$sql = "
CREATE TABLE IF NOT EXISTS `test_quest` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test_id` int(11) NOT NULL,
`quest_id` int(11) DEFAULT NULL,
`test_quest` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_2` (`id`),
KEY `id` (`id`),
KEY `test_id` (`test_id`),
KEY `quest_id` (`quest_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
INSERT INTO `test_quest` (`id`, `test_id`, `quest_id`, `test_quest`) VALUES
(1, 1, 1, 'Где родился Д.И. Менделеев?'),
(2, 1, 2, 'Когда родился Д.И. Менделеев?'),
(3, 1, 3, 'Где Менделеев получил высшее образование?'),
(4, 1, 4, 'Когда был открыт периодический закон Д.И. Менделеева?'),
(6, 1, 5, 'Все ли химические элементы, предсказанные великим ученым, были впоследствии открыты?'),
(7, 1, 6, 'У скольких химических элементов Д.И. Менделеевым были исправлены атомные массы?'),
(8, 1, 7, 'Под каким номером в периодической системе находится химический элемент менделевий, носящий имя великого русского ученого Д.И. Менделеева?'),
(9, 1, 8, 'Имя Д.И. Менделеева увековечено. Какой из перечисленных объектов не существует?');
";
dbDelta($sql);
$sql = "
CREATE TABLE IF NOT EXISTS `test_answers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test_id` int(11) NOT NULL,
`quest_id` int(11) NOT NULL,
`answ_cont` varchar(255) NOT NULL,
`true_sel` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`),
KEY `test_id` (`test_id`),
KEY `test_id_2` (`test_id`),
KEY `quest_id` (`quest_id`),
KEY `test_id_3` (`test_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=35 ;
INSERT INTO `test_answers` (`id`, `test_id`, `quest_id`, `answ_cont`, `true_sel`) VALUES
(1, 1, 1, 'в Москве', ''),
(2, 1, 1, 'в Казани', ''),
(3, 1, 1, 'в Смоленске', ''),
(4, 1, 1, 'в Тобольске', 'в Тобольске'),
(5, 1, 2, '8 февраля 1834 года', '8 февраля 1834 года'),
(6, 1, 2, '28 апреля 1835 года', ''),
(7, 1, 2, '18 марта 1839 года', ''),
(8, 1, 2, '8 февраля 1863 года', ''),
(9, 1, 3, 'В Киеве', ''),
(10, 1, 3, 'В Москве', ''),
(11, 1, 3, 'В Казани', ''),
(12, 1, 3, 'В Петербурге', 'Высшее образование Д.И. Менделеев получил на отделении естественных наук физико-математического факультета Главного педагогического института в городе Петербурге, курс которого окончил в 1855 году с золотой медалью.'),
(13, 1, 4, 'В 1863 году', ''),
(14, 1, 4, 'В 1864 году', ''),
(15, 1, 4, 'В 1869 году', 'Периодический закон был открыт Д.И. Менделеевым в 1869 г.'),
(16, 1, 4, 'В 1879 году', ''),
(17, 1, 5, 'Все', 'Д.И. Менделеев предсказал существование более 10 неизвестных до этого элементов; свойства трех из них он описал наиболее подробно и с удивительной точностью. Все химические элементы, предсказанные великим ученым, были впоследствии открыты.'),
(18, 1, 5, 'Нет', ''),
(19, 1, 6, 'У трех', ''),
(20, 1, 6, 'У семи', ''),
(21, 1, 6, 'У девяти', 'Д.И. Менделеев на основе открытого им закона исправил атомные массы для девяти химических элементов (бериллия, лантана, урана и др.).'),
(22, 1, 6, 'У тринадцати', ''),
(23, 1, 7, '12', ''),
(24, 1, 7, '22', ''),
(25, 1, 7, '38', ''),
(26, 1, 7, '49', ''),
(27, 1, 7, '56', ''),
(28, 1, 7, '101', 'Имя великого русского ученого Д.И. Менделеева носят химический элемент №101 (менделевий)'),
(29, 1, 8, 'вулкан Менделеева на Курилах', ''),
(30, 1, 8, 'город Менделеевск (на Каме)', ''),
(31, 1, 8, 'хребет Менделеева в Северном Ледовитом океане', ''),
(32, 1, 8, 'город Менделеево (на Волге)', 'город Менделеево (на Волге)'),
(33, 1, 8, 'Всесоюзное химическое общество имени Д.И. Менделеева', ''),
(34, 1, 8, 'Всесоюзный научно-исследовательский институт метрологии имени Д.И. Менделеева', '');
";
dbDelta($sql);
add_option("my_tests_version", $my_tests_version);
}
register_activation_hook(__FILE__,'install_my_tests');

Создаются все три таблицы, но заполняются только первые 2. При том, если в PHPMyAdmin вставить чисто запрос из функции - все работает,записи и в третью таблицу добавляются. вот это запрос:


CREATE TABLE IF NOT EXISTS `test_answers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`test_id` int(11) NOT NULL,
`quest_id` int(11) NOT NULL,
`answ_cont` varchar(255) NOT NULL,
`true_sel` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`),
KEY `test_id` (`test_id`),
KEY `test_id_2` (`test_id`),
KEY `quest_id` (`quest_id`),
KEY `test_id_3` (`test_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=35 ;
INSERT INTO `test_answers` (`id`, `test_id`, `quest_id`, `answ_cont`, `true_sel`) VALUES
(1, 1, 1, 'в Москве', ''),
(2, 1, 1, 'в Казани', ''),
(3, 1, 1, 'в Смоленске', ''),
(4, 1, 1, 'в Тобольске', 'в Тобольске'),
(5, 1, 2, '8 февраля 1834 года', '8 февраля 1834 года'),
(6, 1, 2, '28 апреля 1835 года', ''),
(7, 1, 2, '18 марта 1839 года', ''),
(8, 1, 2, '8 февраля 1863 года', ''),
(9, 1, 3, 'В Киеве', ''),
(10, 1, 3, 'В Москве', ''),
(11, 1, 3, 'В Казани', ''),
(12, 1, 3, 'В Петербурге', 'Высшее образование Д.И. Менделеев получил на отделении естественных наук физико-математического факультета Главного педагогического института в городе Петербурге, курс которого окончил в 1855 году с золотой медалью.'),
(13, 1, 4, 'В 1863 году', ''),
(14, 1, 4, 'В 1864 году', ''),
(15, 1, 4, 'В 1869 году', 'Периодический закон был открыт Д.И. Менделеевым в 1869 г.'),
(16, 1, 4, 'В 1879 году', ''),
(17, 1, 5, 'Все', 'Д.И. Менделеев предсказал существование более 10 неизвестных до этого элементов; свойства трех из них он описал наиболее подробно и с удивительной точностью. Все химические элементы, предсказанные великим ученым, были впоследствии открыты.'),
(18, 1, 5, 'Нет', ''),
(19, 1, 6, 'У трех', ''),
(20, 1, 6, 'У семи', ''),
(21, 1, 6, 'У девяти', 'Д.И. Менделеев на основе открытого им закона исправил атомные массы для девяти химических элементов (бериллия, лантана, урана и др.).'),
(22, 1, 6, 'У тринадцати', ''),
(23, 1, 7, '12', ''),
(24, 1, 7, '22', ''),
(25, 1, 7, '38', ''),
(26, 1, 7, '49', ''),
(27, 1, 7, '56', ''),
(28, 1, 7, '101', 'Имя великого русского ученого Д.И. Менделеева носят химический элемент №101 (менделевий)'),
(29, 1, 8, 'вулкан Менделеева на Курилах', ''),
(30, 1, 8, 'город Менделеевск (на Каме)', ''),
(31, 1, 8, 'хребет Менделеева в Северном Ледовитом океане', ''),
(32, 1, 8, 'город Менделеево (на Волге)', 'город Менделеево (на Волге)'),
(33, 1, 8, 'Всесоюзное химическое общество имени Д.И. Менделеева', ''),
(34, 1, 8, 'Всесоюзный научно-исследовательский институт метрологии имени Д.И. Менделеева', '');

Очень даже прекрасно работает. Разбил на три этапа добавления, был один - то же самое, 2 таблицы заполняются, последняя- нет.

Может кто опытным взглядом увидит ошибку?

[umka]
На сайте с 25.05.2008
Offline
456
#1
Sly32:
Может кто опытным взглядом увидит ошибку?

Ошибку удобнее усматривать, если выводить её после выполнения запроса :)

Лог в помощь!
Sly32
На сайте с 29.03.2012
Offline
303
#2

[umka], Напомните, как)))

[umka]
На сайте с 25.05.2008
Offline
456
#3
Sly32
На сайте с 29.03.2012
Offline
303
#4

Вот что значит задать здесь вопрос!!!!

[umka], спасибо, как то я выпустил из виду дебаг)))

оказывается, в одной из строк в значении стояла точка с запятой и она давала ошибку, что странно...

(17, 1, 5, 'Все', 'Д.И. Менделеев предсказал существование более 10 неизвестных до этого элементов; свойства трех из них он описал наиболее подробно и с удивительной точностью. Все химические элементы, предсказанные великим ученым, были впоследствии открыты.'),

Эта строка в запросе непосредственном проходила, а вот при вставке через пхп - нет.

Кстати, нарисовалась новая проблема - плагин вызывает странную ошибку -

[22-May-2015 10:50:01 UTC] PHP Notice: Функция has_cap вызвана с аргументом, который <strong>считается устаревшим</strong> с версии 2.0! Использование уровней пользователей в плагинах и темах считается устаревшим. Используйте роли и возможности.. in /home/еее/wp-includes/functions.php on line 3508

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий