Это обычно происходит при непосредственном использовании функции с empty
.
Пример:
if (empty(is_null(null))) {
echo 'empty';
}
Это связано с тем, что empty
- это языковая конструкция, а не функция, она не может быть вызвана с выражением в качестве аргумента в версиях PHP до 5.5. До PHP 5.5 аргумент empty()
должен быть переменной , но произвольное выражение (такое как возвращаемое значение функции) допустимо в PHP 5.5 +.
empty
, несмотря на его имя, на самом деле не проверяет, является ли переменная «пустой». Вместо этого он проверяет, существует ли переменная, или == false
. Выражения (например, is_null(null)
в примере) всегда будут считаться существующими, поэтому здесь empty
проверяет только, равен ли он false. Здесь вы можете заменить empty()
на !
, например. if (!is_null(null))
, или явно сравнить с ложным, например. if (is_null(null) == false)
.
Вопросы, относящиеся
Это зависит точно, что Вы определяете как "ASCII", но я предложил бы пробовать вариант запроса как это:
SELECT * FROM tableName WHERE columnToCheck NOT REGEXP '[A-Za-z0-9]';
, Что запрос возвратит все строки, где columnToCheck содержит любые неалфавитно-цифровые символы. Если у Вас есть другие символы, которые приемлемы, добавьте их к классу символов в регулярном выражении. Например, если периоды, запятые и дефисы в порядке, изменяют запрос на:
SELECT * FROM tableName WHERE columnToCheck NOT REGEXP '[A-Za-z0-9.,-]';
самая соответствующая страница документации MySQL, вероятно 12.5.2 Регулярных выражений .
Это, вероятно, что Вы ищете:
select * from TABLE where COLUMN regexp '[^ -~]';
Это должно возвратить все строки, где СТОЛБЕЦ содержит символы неASCII (или непечатаемые символы ASCII, такие как новая строка).
Вы можете определить ASCII как все символы с десятичным значением 0–127 (0x00–0x7F) и найти столбцы с символами, отличными от ASCII, используя следующий запрос
SELECT * FROM TABLE WHERE NOT HEX(COLUMN) REGEXP '^([0-7][0-9A-F])*$';
Это был самый исчерпывающий запрос, который я мог придумать.