wpdb-> вставить в пользовательскую таблицу wp с помощью prepare ()

#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 ключевое слово.

После этого вы можете получить доступ к имени таблицы так, как вы намереваетесь.