Как проверить, является ли поле MYSQL нулевым, и заменить на текущую временную метку?

#php #mysql #wordpress

#php #mysql #wordpress

Вопрос:

Я использую WordPress и получил базу данных с разными pid s (личными идентификаторами) и полем activatedValue , для которого уже установлено значение NULL или current_time() .

Я получил pid и должен найти его activatedValue ценность. Чем если бы поле было NULL , я хочу заменить его на current_time() . Я думал о чем-то подобном этому:

 $pid = '52'; // example for a personal id
$activatedValue = $wpdb->get_var( "SELECT activatedValue FROM $table_name WHERE pid = '$pid'" );

if( is_null($activatedValue) ) {
  // replace activatedValue in database with current time
}
 

Как я могу это сделать?


Для меня есть несколько проблем в достижении этого. Я уже пробовал это делать:

 $pid = '52';

if ( ! empty ( $pid ) ) {

  global $wpdb;
  $table_name = $wpdb->prefix . "prelaunchr";
  $activatedValue = $wpdb->get_var( "SELECT activated FROM $table_name WHERE pid = '$pid'" );

  if ( is_null($activatedValue) ) {
    $currentTime = current_time();
    $wpdb->query("UPDATE $table_name SET activated = NOW() WHERE pid = '$pid'");
  }
} 
 

Ответ №1:

Если вы хотите обновить значение в записи базы данных, вам нужно будет запустить инструкцию UPDATE, используя wpdb::query() .

 if( is_null($example_field) ) {
    $wpdb->query("UPDATE $table_name SET example_field = NOW() WHERE pid = '$pid'");
}
 

Комментарии:

1. Это предложение о том, как правильно получить текущее значение? У вас есть предложение о том, как заменить это значение на текущую временную метку? Это самая важная часть для меня!

2. смотрите Пересмотренный ответ

3. Большое спасибо @samonela, я вижу, что вы поняли мою проблему. Я обновил свой ответ до моего текущего кода, который не работает. Поле все еще отображается NULL после запуска кода. Могу ли я как-то проверить, успешно ли выполнен код?

4. ах да — извините, я должен был посмотреть current_time(), чтобы убедиться, что это была функция, прежде чем публиковать это; вы можете использовать now() или CURRENT_TIMESTAMP

5. current_time(); действительно ли это функция, вы можете проверить это прямо здесь: developer.wordpress.org/reference/functions/current_time

Ответ №2:

Я думаю, вы можете изменить DB и вместо использования timestamp использовать datetime, затем:

 $pid = '52';

if ( ! empty ( $pid ) ) {

  global $wpdb;
  $table_name = $wpdb->prefix . "prelaunchr";
  $activatedValue = $wpdb->get_var( "SELECT activated FROM $table_name WHERE pid = '$pid'" );

  if ( is_null($activatedValue) ) {
    //Here you can change the TimeZone of the system//
     date_default_timezone_set('America/Chicago');
    $date = date('Y/m/d h:i:s', time());
    $wpdb->query("UPDATE $table_name SET activated = '{$date}' WHERE pid = '$pid'");
  }
}