#mysql #insert #wordpress #prepare
#mysql #вставить #wordpress #подготовить
Вопрос:
Работаю над системой времени в WordPress и сталкиваюсь с какой-то странной проблемой с wp insert при вставке в пользовательскую таблицу.
Я запускаю следующую функцию в моем functions.php
function clock_in() {
if ( isset( $_POST['punch-in'] ) amp;amp; '1' == $_POST['punch-in'] ) {
$user_id = get_current_user_id();
global $wpdb;
$wpdb->query( $wpdb->prepare(
"
INSERT INTO $wpdb->wp_diss_users_sessions
(session_id,session_begin)
VALUES ( %d, %s )
",
$user_id,'test'
) );
Я протестировал функцию с помощью запроса обновления к таблице wp_users, чтобы убедиться, что функция работает должным образом, как требуется.
Ошибка, которую я получаю, выглядит следующим образом:
WordPress database error: [You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'(session_id,session_begin) VALUES ( 2, 'test' )' at line 2]
INSERT INTO (session_id,session_begin) VALUES ( 2, 'test' )
Моя таблица разработана как таковая:
[session_id] - INT(11) PK NN
[session_begin] - VARCHAR(45)
Я понимаю, что лучше всего использовать prepare, поэтому я пытаюсь правильно построить все свои запросы. Я действительно считаю, что $ wpdb-> wp_diss_users_sessions = правильный синтаксис для ссылки на мою пользовательскую таблицу из исследования. Может быть, я упускаю из виду что-то простое, но у меня болит голова на сегодняшний вечер.
Спасибо всем
Комментарии:
1. Имя таблицы отсутствует в запросе.
2. Возможно, вы захотите прочитать это: wordpress.org/support/topic/… Это в основном та же проблема.
Ответ №1:
Вы получаете ошибку, потому что у вас нет имени таблицы в вашем запросе:
INSERT INTO (session_id,session_begin) VALUES ( 2, 'test' )
^ here should be a table name
Простое использование $wpdb->wp_diss_users_sessions
не сработает, имя вашей таблицы не появится волшебным образом внутри объекта wpdb. Вы должны сохранить его там самостоятельно.
В этой теме на форуме поддержки WordPress предлагается добавить это в функцию вашего плагина / темы:
$wpdb->myplugintable = $table_prefix . 'myplugintable';
Если вы помещаете это в функцию, не забудьте вставить $table_prefix
в ее область действия global
ключевое слово.
После этого вы можете получить доступ к имени таблицы так, как вы намереваетесь.