Как получать данные в WordPress используя MySQLi или $wpdb
У меня есть пользовательская таблица следующего вида:
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. Вот мои вопросы:
- Как отобразить все данные таблицы?
- Как заменить данные при совпадении условия. Например, я хочу изменить значение
time
, гдеuser_ip = 245.356.134.22
Пожалуйста, дайте знать, если есть что-то, что мне необходимо изучить.
Спасибо

Получение данных из таблицы базы данных
$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 не существует в базе данных
}

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

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

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

// Для получения данных используйте
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' )
);

Вы указываете 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 и вывести полученные данные.

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

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

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

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

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