Этот запрос должен работать:
$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, который теперь лишен.
printf("%*c%*c", 4, ' ', 5, ' ');
печатает пробел в поле размера 4, за которым следует пробел в поле размера 5. Так что всего 9 символов.
В вашем опубликованном коде функция возвращает результат из printf
, который дает количество печатных символов, поэтому 9. В основном вы печатаете этот номер 9.
Все так, как ожидалось. Согласно руководству manual
(необязательно). за которым следует целое число или *, или ни одно из них не указывает точность преобразования. В случае, когда * используется, точность задается дополнительным аргументом типа int. Если значение этого аргумента отрицательное, оно игнорируется. Если ни число, ни * не используются, точность принимается равной нулю. См. Таблицу ниже для точных эффектов точности.
Возвращаемое значение 1-2) Количество символов, записанных в случае успешного или отрицательного значения, если произошла ошибка.
blockquote>ваш случай:
int add(int x, int y) { return printf("%*c%*c",x,' ', y,' '); // ^ x is for the first *, y for the second * }
В результате записано
x + y
количество пробелов (включая точность), которое является возвращаемым значением.
printf
возвращает количество напечатанных символов.
printf("%*c", N, C);
печатает N-1
пробелы, за которыми следует символ C.
В общем случае printf
печатает N - length_of_text
] (если это число > 0
, нулевые пробелы в противном случае), за которым следует текст. То же самое относится и к номерам.
, поэтому
return printf("%*c%*c", x, ' ', y, ' ');
печатает пробел с префиксом x
минус length_of_space других пробелов (x-1
), затем делает то же самое для y
. Это делает 4+5
пробелы в вашем случае. Затем printf
возвращает общее количество напечатанных символов. 9.
printf("%d",add(4,5));
Это printf
печатает целое число, возвращаемое функцией add()
, 9.
По умолчанию , printf
выравнивается по правому краю (пробелы перед текстом). Чтобы [ []
-
перед *
, например %-*s
, или %-12s
, %-6d