Этот запрос должен работать:
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
}
Проблема заключается в одинарных кавычках, поэтому ваш запрос завершается с ошибкой и возвращает FALSE, и цикл WHILE не может выполняться. Использование% позволяет сопоставлять любые результаты, содержащие вашу строку (например, SomeText- $ username-SomeText).
Это просто ответ на ваш вопрос, вы должны реализовать материал, упомянутый в других сообщениях: обработка ошибок , используйте escape-строки (пользователи могут вводить что-либо в поле, и вы ДОЛЖНЫ убедиться, что это не произвольный код), используйте PDO вместо mysql_connect, который теперь лишен.
Путаница объясняется тем, что символ обратной косой черты \
используется как побег на двух разных уровнях. Во-первых, интерпретатор Python сам выполняет подстановки для \
, прежде чем модуль re
когда-нибудь увидит вашу строку. Например, \n
преобразуется в символ новой строки, \t
преобразуется в символ табуляции и т. Д. Чтобы получить фактический символ \
, вы также можете избежать его, поэтому \\
дает один \
] персонаж. Если символ, следующий за \
, не является признанным escape-символом, тогда \
обрабатывается как любой другой символ и проходит через него, но я не рекомендую в зависимости от этого. Вместо этого всегда избегайте ваши символы \
, удваивая их, т. Е. \\
.
Если вы хотите увидеть, как Python расширяет ваши экраны строк, просто распечатайте строку. Например:
s = 'a\\b\tc'
print s
Если s
является частью совокупного типа данных, например. список или кортеж, и если вы напечатаете этот агрегат, Python заключит строку в одинарные кавычки и будет включать экраны \
(в канонической форме), поэтому имейте в виду, как печатается ваша строка. Если вы просто напечатаете в интерпретаторе строку с кавычками, она также отобразит ее в кавычках с экранами '\'.
Как только вы знаете, как кодируется ваша строка, вы можете подумать о том, что re
. Например, если вы хотите сбежать \
в строку, которую вы переходите к модулю re
, вам необходимо передать \\
в re
, что означает, что вам нужно будет использовать \\\\
в вашем цитированном Python строка. Строка Python закончится с \\
, а модуль re
будет рассматривать это как единственный литерал \
.
Альтернативный способ включения символов \
в строках Python - использовать необработанные строки, например r'a\b'
эквивалентен "a\\b"
.
Символ r перед регулярным выражением указывает в вызове search () указывает, что регулярное выражение является исходной строкой. Это позволяет использовать обратную косую черту в регулярном выражении как обычные символы, а не в escape-последовательности символов. Позвольте мне объяснить ...
Прежде чем метод поиска re-модуля обрабатывает переданные ему строки, интерпретатор Python принимает начальный проход по строке. Если в строке присутствуют обратные косые черты, интерпретатор Python должен решить, являются ли они частью escape-последовательности Python (например,\n или \ t) или нет.
Примечание: на данный момент Python не заботится независимо от того, является ли или нет '\' метасимволом регулярного выражения.
Если за «\» следует распознанный escape-символ Python (t, n и т. д.), то обратная косая черта и escape-символ заменяются фактическим Unicode или 8-битным символом. Например, '\ t' будет заменен символом ASCII для вкладки. В противном случае он передается и интерпретируется как символ «\».
Рассмотрим следующее.
>>> s = '\t'
>>> print ("[" + s + "]")
>>> [ ] // an actual tab character after preprocessing
>>> s = '\d'
>>> print ("[" + s + "]")
>>> [\d] // '\d' after preprocessing
Иногда мы хотим включить в строку последовательность символов, которая включает в себя '\ 'без интерпретации Python как escape-последовательности. Для этого мы убегаем '\' с '\'. Теперь, когда Python видит «\», он заменяет две обратные косые черты одним символом «\».
>>> s = '\\t'
>>> print ("[" + s + "]")
>>> [\t] // '\t' after preprocessing
После того, как интерпретатор Python выполнит проход по обеим строкам, они передаются методу поиска re-модуля , Метод поиска анализирует строку регулярных выражений, чтобы идентифицировать метасимволы регулярного выражения.
Теперь '\' также является специальным метасимволом регулярного выражения и интерпретируется как один, если он не убежит в то время, когда выполняется метод re search ().
Рассмотрим следующий вызов.
>>> match = re.search('a\\t','a\\t') //Match is None
Здесь совпадение - None. Зачем? Давайте посмотрим на строки после того, как интерпретатор Python сделает свой проход.
String 1: 'a\t'
String 2: 'a\t'
Итак, почему совпадение равно None? Когда search () интерпретирует String 1, поскольку он является регулярным выражением, обратная косая черта интерпретируется как метасимвол, а не обычный символ. Однако обратная косая черта в String 2 не находится в регулярном выражении и уже обработана интерпретатором Python, поэтому ее интерпретируют как обычный символ.
Таким образом, метод search () ищет «escape -t 'в строке' a \ t ', которые не соответствуют.
Чтобы исправить это, мы можем сказать, что метод search () не интерпретирует' \ 'как метасимвол.
Рассмотрим следующий вызов.
>>> match = re.search('a\\\\t','a\\t') // Match contains 'a\t'
Опять же, посмотрим на строки после того, как интерпретатор Python выполнил свой проход.
String 1: 'a\\t'
String 2: 'a\t'
Теперь, когда метод search () обрабатывает регулярное выражение, он видит, что вторая обратная косая черта сбрасывается первым и не должна считаться метасимволом. Поэтому он интерпретирует строку как «a \ t», которая соответствует строке 2.
Альтернативный способ поиска () считать «\» в качестве символа - поставить r перед регулярным выражением. Это говорит интерпретатору Python, что НЕ препроцессор строки.
Рассмотрим это.
>>> match = re.search(r'a\\t','a\\t') // match contains 'a\t'
Здесь интерпретатор Python не изменяет первую строку, но обрабатывает вторую строку. Строки, переданные в search (), следующие:
String 1: 'a\\t'
String 2: 'a\t'
Как и в предыдущем примере, поиск интерпретирует «\» как единственный символ «\», а не метасимвол, таким образом, соответствует String 2 .
Собственный синтаксический анализ Python (частично) на вашем пути.
Если вы хотите увидеть, что видит re
, введите
print '\d'
print '\\d'
print '\\\d'
в командной строке Python. Вы видите, что в \d
и \\d
оба результата приводятся в \d
, последний из которых берет на себя парсер Python.
Если вы хотите избежать любых проблем с ними, используйте необработанные строки как предложенный re module documentation : r'\\d'
приведет к \\d
, видимому модулю RE.