Получение данных из MySQl в Wordpress

Статьи 25.06.2022 (обновлено)

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

Пример 1

Первый способ довольно простой, приведу его в виде сниппета:

<table border="1">
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Points</th>
</tr>
<?php
global $wpdb;
$result = $wpdb->get_results ( "SELECT * FROM studentData" );
foreach ( $result as $print ) {
?>
<tr>
<td><?php echo $print->firstname;?></td>
<td><?php echo $print->lastname;?></td>
<td><?php echo $print->cityname;?></td>
</tr>
<?php
}
?>
</table>

Используем объект $wpdb и с помощью него делаем запрос к Базе.

Пример 2

Теперь разберем более серьезную ситуацию на следующем примере. Допустим у нас есть таблица:

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

В которой есть 4 строки:

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 и у нас есть пару вопросов из данного примера — как отобразить все данные таблицы, как заменить данные, если условие совпало? Например, мы хотим изменить время, где user_ip = 245.356.134.22.

Чтобы получить данные из таблицы базы данных мы используем следующий код:

<?php
$results = $wpdb->get_results( "SELECT * FROM $table_name"); // Query to fetch data from database table and storing in $results
if(!empty($results))                        // Checking if $results have some values or not
{    
    echo "<table width='100%' border='0'>"; // Adding <table> and <tbody> tag outside foreach loop so that it wont create again and again
    echo "<tbody>";      
    foreach($results as $row){   
    $userip = $row->user_ip;               //putting the user_ip field value in variable to use it later in update query
    echo "<tr>";                           // Adding rows of table inside foreach loop
    echo "<th>ID</th>" . "<td>" . $row->id . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>User IP</th>" . "<td>" . $row->user_ip . "</td>";   //fetching data from user_ip field
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>Post ID</th>" . "<td>" . $row->post_id . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>Time</th>" . "<td>" . $row->time . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    }
    echo "</tbody>";
    echo "</table>"; 

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

Чтобы обновить поле времени, если у нас есть какое-то условие, то:

<?php 

if($userip==245.356.134.22){  //Checking if user_ip field have following value
    $wpdb->update( 
    $table_name, 
array( 
    'time' => 'YOUR NEW TIME' // Entring the new value for time field
),      
array('%d')                   // Specify the datatype of time field
);
}

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

<?php
global $wpdb,$ip;
$results = $wpdb->get_results( "SELECT user_ip FROM $table_name");  //query to fetch record only from user_ip field

$new_ip = 245.356.134.22;   //New Ip address storing in variable

if(!empty($results))                       
{    
    foreach($results as $row){  
    $old_ip = $row->user_ip;        // putting the value of user_ip field in variable
    if($new_ip==$old_ip){           //  comparing new ip address with old ip addresses
      $ip = 'Already Exist';        // if ip already exist in database then assigning some string to variable
    }
    }

}
if($ip = 'Already Exist'){          // Checking if variable have some string (It has some string only when if IP already exist in database as checked in if condition by comparing old ips with new ip)
//Insert query according to Ip already exist in database
}else{
//Insert query according to Ip doesn't exist in database
}

В общем, наилучший способ использовать (пример):

<?php $myrows = $wpdb->get_results( "SELECT id, name FROM mytable" ); ?>

Изучите официальную документацию по wpdb.

Этот класс используется для взаимодействия с базой данных без использования необработанных операторов SQL. По умолчанию WordPress использует этот класс для создания экземпляра глобального объекта $wpdb, предоставляя доступ к базе данных WordPress.

Вы можете заменить этот класс на свой собственный, установив глобальную переменную $wpdb в файле wp-content/db.php для вашего класса. Класс wpdb по-прежнему будет включен, поэтому вы можете расширить его или просто использовать свой собственный.

Пример 3

WordPress имеет множество встроенных функций, которые используются для извлечения данных из базы данных, WP_Query() — одна из наиболее часто используемых и мощных функций.

<?php 
// The Query 
$the_query = new WP_Query( $args ); 
// The Loop 
if ( $the_query->have_posts() ) { 
 echo '<ul>'; 
 while ( $the_query->have_posts() ) { 
 $the_query->the_post(); 
 echo '<li>' . get_the_title() . '</li>'; 
 } 
 echo '</ul>'; 
} else { 
 // no posts found 
} 
/* Restore original Post Data */ 
wp_reset_postdata(); 

Используйте данные методы, но предварительно всегда изучайте документацию.

Сергей Ермилов
Опубликовано 21.01.2022
Категория: Статьи
Теги: , ,

Добавить комментарий

Ваш адрес email не будет опубликован.