Как получать данные в WordPress используя MySQLi или $wpdb

25 июл. 2016 г., 02:56:14
Просмотры: 97.3K
Голосов: 11

У меня есть пользовательская таблица следующего вида:

useraw

1. id (Primary*)
2. user_ip  
3. post_id
4. time

Я вставляю данные в таблицу используя

$wpdb->insert($table_name , array('user_ip' => $user_ip, 'post_id' =>
$postID, 'time' => $visittime),array('%s','%d', '%d') );

Вот четыре строки, которые я вставил, используя этот код:

id                  :        245
user_ip             :        245.346.234.22
post_id             :        24434
time                :        255464

id                  :        345
user_ip             :        245.346.234.22
post_id             :        23456
time                :        23467

id                  :        567
user_ip             :        245.346.234.22
post_id             :        57436
time                :        5678

id                  :        234
user_ip             :        245.356.134.22
post_id             :        2356
time                :        45678

Я хочу научиться использовать MySQL запросы в WordPress. Вот мои вопросы:

  1. Как отобразить все данные таблицы?
  2. Как заменить данные при совпадении условия. Например, я хочу изменить значение time, где user_ip = 245.356.134.22

Пожалуйста, дайте знать, если есть что-то, что мне необходимо изучить.

Спасибо

0
Все ответы на вопрос 3
6
11

Получение данных из таблицы базы данных

$results = $wpdb->get_results( "SELECT * FROM $table_name"); // Запрос для получения данных из таблицы базы данных и сохранения в $results
if(!empty($results))                        // Проверка, содержит ли $results какие-либо значения или нет
{    
    echo "<table width='100%' border='0'>"; // Добавление тегов <table> и <tbody> вне цикла foreach, чтобы они не создавались снова и снова
    echo "<tbody>";      
    foreach($results as $row){   
    $userip = $row->user_ip;               // Сохранение значения поля user_ip в переменную для использования в дальнейшем в запросе обновления
    echo "<tr>";                           // Добавление строк таблицы внутри цикла foreach
    echo "<th>ID</th>" . "<td>" . $row->id . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>IP пользователя</th>" . "<td>" . $row->user_ip . "</td>";   // Получение данных из поля user_ip
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>ID записи</th>" . "<td>" . $row->post_id . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>Время</th>" . "<td>" . $row->time . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    }
    echo "</tbody>";
    echo "</table>"; 

}

ПРИМЕЧАНИЕ: Измените формат получения данных в соответствии с вашими потребностями (структура таблицы)

Обновление поля времени при выполнении условия

 if($userip==245.356.134.22){  // Проверка, содержит ли поле user_ip следующее значение
$wpdb->update( 
$table_name, 
array( 
    'time' => 'ВАШЕ НОВОЕ ВРЕМЯ' // Ввод нового значения для поля времени
),      
array('%d')                   // Указание типа данных поля времени
);
}

Обновление

Если вы хотите проверить, существует ли IP, который вы собираетесь вставить в базу данных, то проверьте его следующим образом

global $wpdb,$ip;
$results = $wpdb->get_results( "SELECT user_ip FROM $table_name");  // Запрос для получения записей только из поля user_ip

$new_ip = 245.356.134.22;   // Сохранение нового IP-адреса в переменную

if(!empty($results))                       
{    
    foreach($results as $row){  
    $old_ip = $row->user_ip;        // Сохранение значения поля user_ip в переменную
    if($new_ip==$old_ip){           // Сравнение нового IP-адреса со старыми IP-адресами
      $ip = 'Уже существует';        // Если IP уже существует в базе данных, присвоение строки переменной
    }
    }

}
if($ip = 'Уже существует'){          // Проверка, содержит ли переменная строку (Она содержит строку только если IP уже существует в базе данных, как было проверено в условии if при сравнении старых IP с новым)
// Запрос на вставку, если IP уже существует в базе данных
}else{
// Запрос на вставку, если IP не существует в базе данных
}
25 июл. 2016 г. 10:24:05
Комментарии

Отлично... можете подсказать, как проверить, есть ли IP-адрес уже в базе данных или нет? Если IP-адрес уже есть в базе данных, то запустить программу 1, а если его нет, то запустить программу 2. Я знаю, что нужно использовать WHERE в запросе, но не знаю, как именно его применить.

Ramesh Pardhi Ramesh Pardhi
25 июл. 2016 г. 11:16:51

Вы видели обновленный ответ?

Rishabh Rishabh
26 июл. 2016 г. 08:32:41

Я попробовал это, и это работает. Но сейчас он извлекает все данные из базы данных с помощью foreach, а затем выполняет наш код для проверки совпадения IP. Есть ли другой способ проверить IP напрямую с помощью запроса к базе данных?

Ramesh Pardhi Ramesh Pardhi
26 июл. 2016 г. 15:04:36

Ответ был обновлен! Проверьте, подходит ли он вам.

Rishabh Rishabh
27 июл. 2016 г. 08:18:17

Ришабх, спасибо за помощь... Последний вопрос. Могу ли я использовать запрос типа SELECT user_ip FROM $table_name WHEREuser_ip= $username. Будет ли это работать? Спасибо за ответ и помощь, Ришабх.

Ramesh Pardhi Ramesh Pardhi
27 июл. 2016 г. 09:34:50

Да, вы можете использовать его так $results = $wpdb->get_results( "SELECT user_ip FROM $table_name WHERE user_ip = '$username' ");

Rishabh Rishabh
27 июл. 2016 г. 11:57:01
Показать остальные 1 комментариев
2
// Для получения данных используйте
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM table_name"); 
// а для обновления используйте следующий код
$wpdb->update( 
  $table_name, 
  array( 
    'time' => time(),   // строка
  ), 
  array( 'user_ip' => '245.356.134.22' ), 
  array('%s'), 
  array( '%d' )
);
27 июл. 2016 г. 08:29:20
Комментарии

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

Rishabh Rishabh
27 июл. 2016 г. 09:01:03

@Rishabh не нужно больше комментариев, так как я вставил соответствующие комментарии перед кодом.

Ganesh Ganesh
27 июл. 2016 г. 09:36:49
5

Вы указываете MYSQLi в своем вопросе, но помечаете и ссылаетесь на MySQL. Если вы используете MySQL, следующее решение будет работать для вас:

Это довольно просто, и учитывая, что у вас уже есть сконструированный INSERT запрос, вы можете просто использовать UPDATE следующим образом:

$wpdb->update($table_name , array('user_ip' => $user_ip, 'post_id' =>$postID, 'time' => $visittime),array('%s','%d', '%d') );

Затем все, что вам нужно сделать, это установить значения в вашем запросе для данных, которые вы хотите изменить в БД. Вы можете найти примеры здесь

Что касается получения всех данных, вы можете использовать следующее:

$results = $wpdb->get_results("SELECT * FROM table_name"); 

Вы можете добавить любые параметры WHERE или отсортировать их, как и в стандартном SQL запросе. Затем вы можете перебрать результаты с помощью цикла foreach и вывести полученные данные.

25 июл. 2016 г. 03:43:01
Комментарии

Спасибо за ответ, @hosker. Но я хотел узнать, как получить эти данные $results

Ramesh Pardhi Ramesh Pardhi
25 июл. 2016 г. 11:18:43

Я готов помочь, в отличие от @rishabh, который любезно предоставил вам полный ответ с кодом. Я лишь дал основы того, как сделать то, о чем вы спрашивали. Простой поиск в Google и изучение WordPress Codex могли бы решить вашу проблему. Эти форумы существуют как ресурс, и я ими пользуюсь, но я бы никогда не ожидал, что кто-то напишет код за меня. У вас уже была половина решения, но вы были слишком ленивы, чтобы разобраться и написать код самостоятельно. Вы ничему не научитесь, если кто-то будет делать всё за вас.

hosker hosker
26 июл. 2016 г. 02:16:29

@hosker, ты прав, дружище! Самостоятельное изучение обязательно... Теперь я понимаю, что не стоило давать полный ответ.

Rishabh Rishabh
26 июл. 2016 г. 08:36:54

Хм! Вы правы, ребята. То, что я спрашиваю здесь, для моего ознакомления. То, что я пытаюсь сделать, немного другое. Я хочу узнать некоторые вещи, чтобы использовать их в своем плагине. Что я хочу узнать - это как использовать эти запросы, чтобы показать нужный мне IP, не извлекая все данные из базы данных. Мне нужен запрос, который проверяет нужный мне IP и затем отображает его. Что если у меня 30000 IP-адресов? Он будет извлекать все 30000 IP с помощью foreach. Это неправильно! Вот почему мне нужна ваша помощь.

Ramesh Pardhi Ramesh Pardhi
26 июл. 2016 г. 15:13:04

просто хочу сообщить, что ваша ссылка на "примеры здесь" больше не работает, и они меняются на https://developer.wordpress.org/reference/classes/wpdb/

Steven Smith Steven Smith
13 мая 2021 г. 16:52:17