Использование $wpdb->update, но запутался в WHERE и SET
Я запутался в использовании WHERE в $wpdb->update :/
Эти последние строки моего кода ДОЛЖНЫ обновлять таблицу с IP-адресом при активации ПО. Если IP меняется, он записывает второй IP-адрес.
Сейчас активация РАБОТАЕТ, но не записывает IP в таблицу и выдает ошибку в логе. Я понимаю, что неправильно использую $wpdb->update.
Раньше я использовал MySQL-код в отдельном скрипте и БД, и он работал, но моя ошибка просто в плохом запросе.
Ошибка гласит: Unknown column '0' in 'where clause' for query UPDATE ma1n_ipn_data_tbl
SET 0
= '118.210.134.xxx' WHERE 0
= '1'
КОД:
Вот строки более четко, если код вставлен неправильно ниже: http://prntscr.com/mkiukd
Мне нужна помощь, если вы можете привести пример: обновить таблицу, установить IP в $variable из getip.php где item_name = и т.д.. Спасибо :P КОД:
//ВСЁ РАБОТАЕТ ДО ЭТОГО МОМЕНТА//
if ($row->ip_address_01 == 0){
$wpdb->update($ipn_table, array( $row->ip_address_01 = $ipONactivate ),array(($row->payer_email = $serial) && ($row->item_name = $product)));
// $sql=( "UPDATE $ipn_table SET ip_address_01 = $ipONactivate WHERE payer_email = $serial && item_name = $product" ); //БЫЛО РАНЬШЕ
} else {
if ($row->ip_address_01 !== $ipONactivate && $row->ip_address_02 == 0){
$wpdb->update($ipn_table, array( $row->ip_address_02 = $ipONactivate),array($row->payer_email = $serial && $row->item_name = $product));
// $sql=( "UPDATE $ipn_table SET ip_address_02 = $ipONactivate WHERE payer_email = $serial && item_name = $product" ); //БЫЛО РАНЬШЕ
} else {
echo false;
}
} //ОШИБКА
//Unknown column '0' in 'where clause' for query UPDATE `ma1n_ipn_data_tbl` SET `0` = '118.210.134.xxx' WHERE `0` = '1'
Вам необходимо ознакомиться с документацией функции, которая доступна здесь.
Функция принимает следующие аргументы:
- $table Имя таблицы.
- $data PHP массив, где ключи - это названия столбцов, а значения - данные для вставки в эти столбцы.
- $where PHP массив, где ключ - это название столбца, а значение - значение для проверки.
А также два дополнительных необязательных аргумента, которые могут использоваться для принудительного задания типов значений 2-го и 3-го аргументов. Подробнее об этом смотрите в документации.
Вы допустили ошибку, смешав синтаксис PHP и SQL во 2-м и 3-м аргументах ($row->ip_address_01 = $ipONactivate
присваивает значение $ipONactivate
переменной $row->ip_address_01
, а не создает массив). Также вы пытаетесь использовать значение столбца из предыдущего запроса (например, $row->ip_address_01
) в качестве имени столбца.
Вам нужно правильно форматировать аргументы следующим образом:
$wpdb->update(
$ipn_table,
array(
'ip_address_01' => $ipONactivate
),
array(
'payer_email' => $serial,
'item_name' => $product,
)
);
Эта функция обновит столбец ip_address_01
в тех строках, где payer_email
равен $serial
и item_name
равен $product
. Эквивалентный SQL-запрос будет выглядеть так:
$sql = "UPDATE {$ipn_table} SET ip_address_01='{$ipONactivate}' WHERE payer_email='{$serial}' AND item_name='{$product}'";
Преимущество использования функции в том, что вам не нужно писать полный запрос (достаточно только указать имена столбцов и значения), а также функция автоматически подготавливает и экранирует значения, защищая вас от SQL-инъекций (чего не произойдет, если использовать мой SQL-пример в чистом виде).

Спасибо за объяснение, Джейкоб. И ты, и Кшишек были очень терпеливы и помогли даже таким тугодумам, как я. Думаю, мы ценим ваши объяснения ЕЩЁ БОЛЬШЕ именно потому, что документация иногда кажется "китайской грамотой" (в зависимости от источника, без обид), а разные способы сделать одно и то же, предлагаемые разными людьми в интернете, только запутывают. Но ты объяснил всё очень понятно.
Я даже не буду пробовать код, пока не прочитаю, не сравню и не пойму его до конца. Ещё раз спасибо. :)
