$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
Вы определяете строку, используя одинарные кавычки, и PHP не анализирует строки с разделителями одиночной кавычки. Чтобы получить переменную интерполяцию, вам нужно использовать двойные кавычки или конкатенацию строк (или их комбинацию). См. http://php.net/manual/en/language.types.string.php для получения дополнительной информации.
Также вы должны проверить, что mysql_query вернул действительный ресурс результата, иначе fetch_ *, num_rows и т. д. не будут работать с результатом, поскольку это не результат! IE:
$username = $_POST['username']; $password = $_POST['password']; $result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username'); if( $result === FALSE ) { trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR); } else { while( $row = mysql_fetch_array($result) ) { echo $row['username']; } }
http://us.php.net/manual/en/function.mysql-query.php для получения дополнительной информации.
TLDR; демон docker хранит список контейнеров в памяти. На docker ps
доступ к файловой системе не требуется. На docker create/run/start
список контейнера может быть получен из слоя, найденного в /var/lib/docker/aufs
(если вы используете драйвер хранения aufs )
Сами контейнеры находятся под /var/lib/docker/containers/{id}
. Как не разрешено вопросом 15047 , этот путь загружается, когда запускается демон docker. После этого он управляется в памяти.
docker ps
запрашивает контейнеры в api/client/ps.go#L59
:
containers, err := cli.client.ContainerList(options)
Он запрашивает api/client/lib/container_list.go#L45
resp, err := cli.get("/containers/json", query, nil)
Это управляется в api/server/router/container/container.go#L34
local.NewGetRoute("/containers/json", r.getContainersJSON),
It затем запрашивает бэкэнд в api/server/router/container/container_routes.go#L48
containers, err := s.backend.Containers(config)
. Каков интерфейс в api/server/router/container/backend.go#L58
Containers(config *daemon.ContainersConfig) ([]*types.Container, error)
, реализованный демоном докеров в daemon/list.go#L83-L86
:
// Containers returns the list of containers to show given the user's filtering.
func (daemon *Daemon) Containers(config *ContainersConfig) ([]*types.Container, error) {
return daemon.reduceContainers(config, daemon.transformContainer)
}
Демон имеет список контейнеров: daemon/list.go#L37-L40
// List returns an array of all containers registered in the daemon.
func (daemon *Daemon) List() []*container.Container {
return daemon.containers.List()
}
Из contStore
: daemon/daemon.go#L123-L132
func (c *contStore) List() []*container.Container {
containers := new(History)
c.Lock()
for _, cont := range c.s {
containers.Add(cont)
}
c.Unlock()
containers.sort()
return *containers
}
type contStore struct {
s map[string]*container.Container
sync.Mutex
}