Как и все остальные, прежде чем вы сможете использовать $_SERVER['REMOTE_ADDR'];
для получения IP-адреса клиента.
Кроме того, если вам нужна дополнительная информация о пользователе, вы можете использовать это:
" . $clientDetails->country . "";
?>
Более подробная информация клиента находится в $ clientDetails. Вы можете получить json-элементы, хранящиеся в переменной $ clientDetails следующим образом: $ clientDetails-> PostalCode / hostname / region / loc ...
Я использую ipinfo.io , чтобы получить Дополнительная информация.
Надеюсь, это поможет.
Вы правы, полагая, что <>
означает «не равно». Что вы упускаете, так это то, что NULL
ничего не равно, а также не равно ничему (даже другим значениям NULL
). Любое сравнение на равенство с NULL
на самом деле оценивается как «Неизвестный», который не совпадает с «Истина» или «Ложь».
NULL = '?' -- evaluates to Unknown
NULL <> '?' -- evaluates to Unknown
NULL = NULL -- evaluates to Unknown
NULL <> NULL -- evaluates to Unknown
Если вы хотите включить NULL
записей в свой результат, вам нужно сравнить, используя IS NULL
. Измените свои заявления на это:
AND (Address1 <> '?' OR Address1 IS NULL)
AND (Address2 <> '?' OR Address2 IS NULL)
AND (Address3 <> '?' OR Address3 IS NULL)
<>
означает «не равно не», поэтому что-то вроде 'abc' <> 'def'
будет оцениваться как TRUE
. Однако в отношении NULL
вы не можете использовать логические операторы. Использование логического оператора с NULL
возвращает результат NULL
(фактически неизвестный), что не соответствует действительности; и (чтобы заявить очевидное) предложение верно только в том случае, если оно верно. Итак, в результате что-то вроде 'abc' <> NULL
= NULL != TRUE
; Это означает, что требования пункта WHERE
не выполнены.
Для работы с NULL
вам необходимо использовать операторы IS NULL
и IS NOT NULL
. Итак, для вашего SQL вам понадобится:
AND (Address1 <> '?' OR Address1 IS NULL)
AND (Address2 <> '?' OR Address2 IS NULL)
AND (Address3 <> '?' OR Address3 IS NULL)
(при условии, что вы хотите получить строки с возвращенным NULL
).
Как прокомментировал Шон, вы можете обернуть столбцы, например Address1
, с помощью функции ISNULL
или COALESCE
(т.е. ISNULL(Address1,'') <> '?'
), однако я рекомендую против этого. Использование этих функций в вашем WHERE
сделает ваш запрос не SARGable и в результате может оказать (серьезное) влияние на производительность вашего запроса.