Ошибка произошла здесь из-за использования одинарных кавычек ('
). Вы можете поместить свой запрос следующим образом:
mysql_query("
SELECT * FROM Users
WHERE UserName
LIKE '".mysql_real_escape_string ($username)."'
");
Он использует mysql_real_escape_string
для предотвращения SQL-инъекции. Хотя мы должны использовать расширение MySQLi или PDO_MYSQL для обновленной версии PHP (PHP 5.5.0 и более поздних версий), но для более старых версий mysql_real_escape_string
это будет трюк.
Являются ли переменные типа в предложениях «где» в том же пространстве имен с родителями?
blockquote>No *. Это становится немного легче, если вы думаете о
foo :: s -> s
в терминахfoo :: forall s. s -> s
. В конце концов, переменная типа указывает, что функция работает для любого типаs
. Давайте добавим четкие количественные значения к вашему коду:{-# LANGUAGE ExplicitForAll #-} data T s = T (s -> s) foo :: forall s. T s -> s -> s foo (T f) x = bar x where bar :: forall s. s -> s bar a = f a
Как вы можете видеть, есть два
forall s.
. Но одно вbar
неверно. В конце концов, вы не можете выбрать любойs
, но тот, который уже используется вs
. Это можно сделать, включивScopedTypeVariables
:{-# LANGUAGE ScopedTypeVariables #-} data T s = T (s -> s) -- vvvvvvvv explicit here foo :: forall s. T s -> s -> s foo (T f) x = bar x where -- vvvvvv same as above here bar :: s -> s bar a = f a
Однако есть некоторые трюки, чтобы избавиться от
ScopedTypeVariables
. Например, в этом случае:data T s = T (s -> s) foo :: T s -> s -> s foo (T f) x = (bar `asTypeOf` idType x) x where bar a = f a idType :: a -> a -> a idType a _ = a -- For completion, definition and type of 'asTypeOf' -- asTypeOf :: a -> a -> a -- asTypeOf x _ = x
Для любого
x :: s
терминidType x
имеет типs -> s
, аasTypeOf
принуждает обе иметь одинаковый тип.В зависимости от вашего фактического кода, что-то вроде этого может быть более или менее выполнимым.
* Ну, в этом случае, поскольку можно использовать
ScopedTypeVariables
, см. более позднюю часть ответ.
ScopedTypeVariables
действительно являются решением, но есть дополнительные требования к их использованию: вы должны указать явные forall
s в типе подписей, объявляющих переменные, которые вы хотите использовать, например:
foo :: forall s. T s -> s -> s
Это так, что значение сигнатур в коде не зависит от того, включено ли расширение или нет.