Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

web - tec / PHP 5 для начинающи

.pdf
Скачиваний:
119
Добавлен:
12.06.2015
Размер:
26.79 Mб
Скачать

Введение в базы данных и SQL 413

Добавим в таблицу user новое поле типа ENUM с именем sex. Данное поле можно будет использовать для записи пола пользователя:

mysql> ALTER TABLE user ADD sex ENUM('M', 'F') DEFAULT 'M'; Query OK, 0 rows affected (0.24 sec)

Records: 0 Duplicates: 0 Warnings: 0

mysql> DESC user;

 

 

 

 

 

 

+----------------

+---------------------

+-------

+-----

+---------

+-----------

+

| Field

| Type

| Null

| Key | Default

| Extra

|

+----------------

+---------------------

+-------

+-----

+---------

+-----------

+

| ...

|

|

|

|

|

|

| sex

| enum('M','F')

| YES

|

| M

|

|

+----------------

+---------------------

+-------

+-----

+---------

+-----------

+

10 rows in set (0.00 sec)

Новое поле добавляется в таблицу как последнее поле. Чтобы вставить новое поле между другими полями, используется ключевое слово AFTER. Теперь удалим только что созданное поле:

mysql> ALTER TABLE user DROP sex; Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0

Чтобы вставить новое поле sex сразу после поля username, можно ввести сле+ дующую команду:

mysql> ALTER TABLE user ADD sex ENUM('M', 'F') DEFAULT 'M' AFTER username;

 

Query OK, 0 rows affected (0.09 sec)

 

 

 

 

 

Records: 0 Duplicates: 0 Warnings: 0

 

 

 

 

 

mysql> desc user;

 

 

 

 

 

+---------------

+----------------------

+------

+-----

+------------

+-----------

+

| Field

| Type

| Null

| Key | Default

| Extra

|

+---------------

+----------------------

+------

+-----

+------------

+-----------

+

| ...

|

|

|

|

|

|

| sex

| enum('M','F')

| YES

|

| M

|

|

+---------------

+----------------------

+------

+-----

+------------

+-----------

+

10 rows in set (0.00 sec)

Чтобы поместить новое поле в начало списка полей, вместо ключевого слова AFTER необходимо использовать ключевое слово FIRST, так как предшествующих по+ лей в этом случае нет.

Если сайт адресован женщинам, вероятно, значение по умолчанию для поля sex следует изменить с M на F:

mysql> ALTER TABLE user ALTER sex SET DEFAULT 'F'; Query OK, 0 rows affected (0.01 sec)

Records: 0 Duplicates: 0 Warnings: 0

Для полного изменения определения поля используется ключевое слово MODIFY:

mysql> ALTER TABLE user MODIFY userprofile VARCHAR(250) NOT NULL -> DEFAULT 'No Comment';

Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0

Чтобы изменить имя и определение поля, можно использовать ключевое слово

CHANGE:

mysql> ALTER TABLE user CHANGE userposition playerposition VARCHAR(50) NOT NULL;

Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0

414 Глава 9

Аналогично можно добавлять или удалять индексы или первичные ключи:

mysql> ALTER TABLE user ADD INDEX (username); Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0

mysql> ALTER TABLE user DROP INDEX username; Query OK, 0 rows affected (0.09 sec) Records: 0 Duplicates: 0 Warnings: 0

Чтобы приобрести опыт работы с командой ALTER TABLE, рекомендуется поэкс+ периментировать с ней, в частности для начала можно восстановить структуру табли+ цы user.

Изменять структуру таблиц в PHP также просто, как вводить любые другие запро+ сы с помощью функции mysql_query(). Предположим, что создано подключение к базе данных sample_db. Чтобы удалить индекс registerdate, необходимо ис+ пользовать следующий код:

mysql_query("ALTER TABLE user DROP INDEX registerdate");

Вставка данных в таблицу

Попытаемся вставить в созданные таблицы некоторые данные. (Вставка данных с помощью PHP более подробно рассматривается в следующей главе.)

Чтобы вставить в таблицу новую запись (или несколько записей), используется SQL+команда INSERT:

mysql> INSERT INTO access_log VALUES('/score.html', 'Pads', 2, NULL); Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM access_log WHERE userid = 'Pads';

 

+----------------

 

+--------

+------------

 

+------------------------

+

| page

|

userid | visitcount

| accessdate

|

+----------------

 

+--------

+------------

 

+------------------------

+

|/score.html

|

Pads |

2

| 20040804153559

|

+----------------

 

+--------

+------------

 

+------------------------

+

1

row in set (0.00

sec)

 

 

 

Чтобы вставить строковое значение, его необходимо заключить в кавычки.

Чтобы использовать этот синтаксис, нужно указать соответствующее значение для каждого поля в таблице. Для поля accessdate в качестве значения указывается NULL. Данное поле имеет тип TIMESTAMP и в нем сохраняется текущее системное время в формате YYYYMMDDhhmmss. Для поля типа integer с атрибутом AUTO_INCREMENT задается значение NULL или 0.

Чтобы вставить значения только в определенное подмножество полей таблицы, используется другой синтаксис:

mysql> INSERT INTO access_log (page, userid, visitcount) -> VALUES('/stats.html', 'Pads', 1);

Query OK, 1 row affected (0.00 sec)

В случае если данный запрос выполняется успешно, указанные поля получают пе+ речисленные значения, тогда как остальным полям присваиваются значения по умол+ чанию. Например, accessdate ++++++ поле имеет тип timestamp, поэтому его значение по умолчанию равно текущему системному времени, что и требовалось:

mysql> SELECT * FROM access_log WHERE userid = 'Pads';

 

+----------------

+---------

+------------

+------------------------

+

| page

| userid

| visitcount | accessdate

|

+----------------

+---------

+------------

+------------------------

+

Введение в базы данных и SQL 415

|/score.html

| Pads

|

2

| 20040804153559

|

|/stats.html

| Pads

|

1

|

20040804152382

|

+----------------

+---------

+------------

 

+------------------------

 

+

1 row in set (0.00 sec)

Экранирование кавычек

При вставке строкового значения в поле символьного или текстового типа необ+ ходимо убедиться, что все записываемые в поле кавычки экранированы (с помощью обратной косой черты). В противном случае возникнет ошибка:

mysql> INSERT INTO user (userprofile) -> VALUES('I'm a rugby player.'); '> '> '> ';

ERROR 1064: You have an error in your SQL syntax near 'm a rugby player.');

at line 1

(ОШИБКА 1064: ошибка SQL-синтаксиса около 'm a rugby player.');

в строке 1)

Несмотря на то что в конце запроса стоит точка с запятой, клиент mysql выводит сообщение об ошибке, так как MySQL+сервер ожидает, что для последней одинарной кавычки будет добавлена парная одинарная кавычка. Именно поэтому в начале сооб+ щения об ошибке стоит кавычка. Если вставить еще одну одинарную кавычку, чтобы удовлетворить ожидания сервера, то будет сгенерирована ошибка. Чтобы решить эту проблему, можно либо экранировать внутреннюю одинарную кавычку:

mysql> INSERT INTO user (userprofile) VALUES('I\'m a rugby player.');

либо заключить все строковое значение в двойные кавычки:

mysql> INSERT INTO user (userprofile) VALUES("I'm a rugby player.");

Необходимо помнить о том, что обратная косая черта (которая используется для обозначения каталога на DOS/Windows+платформе) также должна быть экранирова+ на. В такой ситуации используется двойная обратная косая черта:

mysql> INSERT INTO user (userprofile) VALUES("C:\\Program Files\\PHP");

Если попытаться вставить новую запись, содержащую такое же значение для пер+ вичного или уникального ключа, как и у существующей записи, то возникнет ошибка:

mysql> INSERT INTO user (userid, userprofile) -> VALUES('Pads', 'I\'m a rugby player.');

ERROR 1062: Duplicate entry 'Pads' for key 1

(ОШИБКА 1062: Дублирующееся значение 'Pads' для ключа 1)

MySQL+сервер сообщает, что пользователь пытается вставить дублирующуюся за+ пись, содержащую уже существующее значение для первичного ключа userid. Поль+ зователь Pads в этой таблице уже существует. И поскольку поле userid определено как первичный ключ, дублирование записей не допускается.

Однако можно вставить новую запись, переписав существующую. Например, пред+ положим, что были вставлены неверные значения для записи в таблице user, и вме+ сто того чтобы удалять эту запись и вставлять ее снова, неправильную запись можно просто заменить правильной. Для этого используется команда REPLACE. Единствен+ ное отличие REPLACE от INSERT заключается в том, что если первичный ключ для новой записи дублирует существующее значение, то REPLACE переписывает сущест+ вующую запись, тогда как INSERT генерирует ошибку.

mysql> REPLACE INTO user (userid, userprofile) -> VALUES('Pads', 'I\'m a rugby player.');

Query OK, 1 row affected (0.00 sec)

416 Глава 9

Заполнение таблиц данными

Теперь можно попытаться вставлять в таблицы какие+либо записи, например, ис+ пользуя команду INSERT, вставить запись для пользователя Pads:

mysql> INSERT INTO user VALUES( -> NULL,

-> 'Pads',

-> password('12345'), -> 'Brian Reid',

-> 'Winger',

-> 'Stickypads@doggiesrugby.co.za', -> 'Высококлассный нападающий.');

Чтобы зашифровать пароль 12345, можно использовать функцию password(). Это одна из функций MySQL+сервера, которые подробнее обсуждаются в следующей главе.

В данном случае в поле usernumber записывается значение NULL. Поскольку это поле имеет атрибут AUTO_INCREMENT, номер, назначаемый каждому новому пользо+ вателю, автоматически увеличивается на единицу.

Ниже показаны данные для таблицы user. Следует учесть, что здесь не приводятся значения поля password, так как значения, сохраняемые MySQL, все равно будут за+ шифрованы. В этом поле для каждого пользователя можно вставить любое значение.

Usernumber

Userid

Username Userposition

Useremail

Userprofile

 

 

 

 

 

 

1

Pads

Brian Reid

Winger

Stickypads@

Высококлассный

 

 

 

 

doggiesrugby.co.za

нападающий

2

Nicrot

Nic Malan

Mid

therot@

Неудачник

 

 

 

 

mywebsiteaddress.com

 

3

Spargy

Andrew

Mid

Spargy@

Никогда не полу-

 

 

Sparg

 

whatyoumaycallit.com

чит мяч от Dodge

4

Dodge

Dave

Link

davidm@contechst.com

Адмирал!

 

 

Mercer

 

 

 

5

Mac

Murray

Winger

murray@

Это не мой

 

 

McCcallum

 

doggiesrugby.co.za

номер

6

Greeny

Mark

Utility back

greeny@

Никогда

 

 

Greenfield

 

greenyweb.co.za

не выбрасывает

 

 

 

 

 

мяч за линию

Следующая команда вставляет в таблицу access_log запись для пользователя Greeny:

mysql> INSERT INTO access_log VALUES( -> '/penalties/index.html',

-> 'Greeny', -> 9,

-> '20040321123155');

Поле accessdate в обычных обстоятельствах получает значение NULL. Таблица access_log должна содержать только несколько фиктивных записей, необходимых для последующих примеров. Разрабатываемое приложение, которое будет использовать таблицу для регистрации числа посещений фиктивного Web+сайта, будет автоматически записывать в эту таблицу данные. Это касается всех примеров вплоть до конца 11 главы.

После ввода всей необходимой информации должна получиться готовая к исполь+ зованию база данных.

Введение в базы данных и SQL 417

Резюме

Вданной главе рассматривались модели хранения информации, базы данных

инаиболее жизнеспособные варианты хранения больших массивов данных, а также был дан краткий обзор преимуществ систем управления реляционными базами данных (СУРБД). Кроме того, в главе обсуждались такие проблемы, как производительность, работоспособность и безопасность. В главе объясняется, почему свободно доступная СУРБД MySQL является серьезным кандидатом для применения в большинстве при+ ложений, использующих базы данных.

Еще раз кратко опишем преимущества реляционных баз данных с клиент/сервер+ ной архитектурой (которую поддерживают не все СУРБД):

производительность: нормализация баз данных значительно увеличивает про+ изводительность;

многопользовательская среда: единственным ограничением, налагаемым на коли+ чество одновременно подключающихся пользователей, является тип приобретен+ ной лицензии и/или производительность имеющегося аппаратного обеспечения;

доступность: сетевая СУРБД может обрабатывать запросы ‘‘в реальном времени’’, в любое время делая доступными актуальные данные; иначе говоря, при необхо+ димости к такой базе данных можно получить доступ отовсюду и в любой момент;

безопасность: жизненно важным является управление доступом к данным по+ средством хорошо организованной схемы обеспечения безопасности; напри+ мер, система MySQL не предоставляет непосредственный доступ к каким+либо сохраненным в ней данным, обеспечивая таким образом безопасность инфор+ мации на более высоком по сравнению с операционной системой уровне; поль+ зователь, не имеющий необходимых привилегий, не может выполнять несанк+ ционированные операции с данными;

надежность: когда речь идет о программном обеспечении, степень надежности, как правило, измеряется частотой таких отказов продукта в течение срока службы, которые требуют перезапуска; например, MySQL порождает дочерние процессы для обработки одновременных запросов; когда дочерний процесс ра+ ботает неверно и в конечном итоге останавливается, он редко тянет за собой весь сервер баз данных, таким образом, сводя к минимуму свое влияние на це+ лостность данных в базе.

Подведем итог: планируя разработку целевых многопользовательских Web+прило+ жений, в качестве сервера для хранения данных стоит рассматривать сетевую СУРБД.

В этой главе также рассматривалась установка MySQL+сервера и основы SQL ++++++

языка структурированных запросов, на котором основана система MySQL. В главе описывались некоторые основные SQL+запросы ++++++ SELECT, INSERT, REPLACE, DELETE и UPDATE, а также права доступа в MySQL.

Любой сценарий, в котором для подключения к MySQL+серверу используются PHP+ функции, позволяет выбрать определенную информацию в базах данных сервера. В главе описывалось несколько способов для обработки ошибок, возникающих в MySQL+сервере; рассматривалось создание и модификация таблиц с помощью SQL+ операторов, а также заполнение таблиц в базе данных информацией, которую можно будет использовать в последующих главах.

10

Получение данных от MySQL с помощью PHP

До сих пор основное внимание в книге уделялось проверке соединения с MySQL либо через клиентскую программу, либо посредством MySQL+функций PHP, а также созданию таблиц и заполнению их данными. Одним из первых SQL+операторов, ко+ торые описывались в главе 9, был базовый оператор SELECT. Чтобы точно опреде+ лить, какие данные должна возвращать база, можно использовать множество других операторов. В этой главе описываются способы получения доступа к данным, храня+ щимся в MySQL+базе данных, из PHP+сценариев.

Вначале следует рассмотреть PHP+функции, предназначенные для получения данных,

азатем изучить методику формирования SQL+операторов SELECT, позволяющих получить доступ к необходимым данным, упорядоченным так, как нужно для работы приложения.

Затем будет рассмотрена возможность ограничения количества возвращаемых ре+ зультатов, а также их упорядочение и группировка. Кроме того, в учебных примерах данной главы создается сценарий для просмотра пользовательских записей, позво+ ляющий просматривать таблицы созданной в предыдущей главе базы данных.

Получение данных с помощью PHP

При использовании SELECT+операторов с функцией mysql_query() результи+ рующее множество (которое также можно отобразить в командной строке mysql) пе+ редается в память, и возвращается идентификатор результата. Обычно этот иденти+ фикатор сохраняется в переменной, например, $result, и используется для указания результирующего множества в последующих вызовах функций.

Ранее уже было показано, как функция mysql_fetch_row() возвращает одну строку из результирующего множества. В простом примере из предыдущей главы ис+ пользуется цикл while для поочередного вывода каждой строки результирующего

Получение данных от MySQL с помощью PHP 419

множества, созданного оператором SHOW DATABASES. Ниже приводится усовершен+ ствованная версия сценария show_db.php, которая распечатывает информацию из таблицы user базы данных sample_db:

<?php include "./common_db.inc";

$link_id = db_connect('sample_db');

$result = mysql_query("SELECT * FROM user", $link_id);

while($query_data = mysql_fetch_row($result)) {

echo "'",$query_data[1],"' - ",$query_data[4],"<br>";

}

?>

Сценарий возвращает следующий вывод:

'Nicrot' - Mid

'Spargy' - Mid

'Pads' - Winger

'Dodge' - Link

'Mac' - Winger 'Greeny' - Utility back

Сначала сценарий подключается к серверу с помощью функции db_connect (которая определена в подключаемом файле common_db.inc), указывая необходимую базу данных sample_db. Затем выполняется SQL+оператор “SELECT * FROM user”, результи+ рующее множество которого представляет собой все содержимое таблицы user.

В переменной $result хранится возвращаемый идентификатор результата, с по+ мощью которого в вызове функции mysql_fetch_row() указывается результирую+ щее множество. Данная функция в свою очередь выбирает первую строку результата, из которой затем выводятся второе и четвертое поля (userid и userposition, со+ ответственно). После этого внутренний указатель перемещается к следующей строке результата, а цикл while продолжается до тех пор, пока не будут выбраны все содер+ жащиеся в таблице строки.

Достичь того же результата можно более эффективным способом:

$result = mysql_query("SELECT userid, userposition FROM user", $link_id);

while($query_data = mysql_fetch_row($result)) {

echo "'",$query_data[0],"' - ",$query_data[1],"<br>";

}

Извлекая из таблицы только те поля, которые нужны, можно сэкономить время

ипамять.

ВPHP имеется еще две функции, которые можно использовать для выборки дан+ ных: mysql_fetch_array и mysql_fetch_object(). Обе они работают в основном аналогично функции mysql_fetch_row(), единственное отличие заключается в ти+ пе возвращаемых данных. Лучше всего это можно проиллюстрировать на примере кода для выборки значений из результирующего множества.

Функция mysql_fetch_array()() возвращает из результирующего множества один ассоциативный массив, сохраняя каждое значение в элементе, имя которого со+ ответствует имени поля:

while($query_data = mysql_fetch_array($result)) { echo "'",$query_data["userid"],"' - ", $query_data["userposition"],"<br>";

}

420 Глава 10

Функция mysql_fetch_object() возвращает один объект из результирующего множества, сохраняя каждое значение как свойство данного объекта. Свойства име+ нуются согласно именам полей:

while($query_data = mysql_fetch_object($result)) { echo "'",$query_data->userid,"' - ", $query_data->userposition,"<br>";

}

Две эти функции особенно полезны в ситуациях, когда необходимо изменить структуру таблиц базы данных. Если не изменять имена полей, то можно не беспоко+ иться о порядке, в котором они появляются в таблице, потому что можно извлечь значение поля, указав его имя, а не индекс. Хотя обе функции работают медленнее, чем mysql_fetch_row(), они обладают одним дополнительным преимуществом ++++++

эти функции делают сценарии более читабельными (например, впоследствии в коде большого приложения можно перепутать поля, если указывать только их индексы).

Существует еще одна функция, заслуживающая внимания: mysql_result(), кото+ рая возвращает значение определенного поля в определенной записи. В качестве ар+ гументов данная функция принимает, как обычно, идентификатор результата, а также номер строки и имя поля. Можно переписать приведенный выше пример так:

$result = mysql_query("SELECT * FROM user", $link_id);

for($i =0; $i < mysql_num_rows($result); $i++){

echo "'", mysql_result($result, $i, "userid"),"' - ", mysql_result($result, $i, "userposition"),"<br>";

}

Можно также выводить значения в обратном порядке:

$result = mysql_query("SELECT * FROM user", $link_id);

for($i = mysql_num_rows($result)-1; $i >=0; $i--){

echo "'", mysql_result($result, $i, "userid"),"' - ", mysql_result($result, $i, "userposition"),"<br>";

}

В этом случае результирующее множество будет таким:

'Greeny' - Utility back 'Mac' - Winger

'Dodge' - Link

'Pads' - Winger

'Spargy' - Mid

'Nicrot' - Mid

Имя поля также можно указать в виде целого числа, представляющего смещение поля:

echo "'", mysql_result($result, $i, 1),"' - ", mysql_result($result, $i, 3),"<br>";

Другой способ перемещения к заданной строке данных заключается в использова+ нии функции mysql_data_seek(). Она работает аналогично функции fseek(), ко+ торая использовалась в примерах главы 7 для навигации в файловом потоке. Эта функция в качестве аргументов принимает дескриптор результата и целое число, представляющее позицию в результирующем множестве, к которой необходимо пе+ рейти. Как можно предположить, данная функция возвращает True в случае успешно+ го перемещения и False при переходе за границу массива. Сохраните следующий код в файле show_seek.php и откройте его в браузере:

Получение данных от MySQL с помощью PHP 421

<?php

include "./common_db.inc";

$link_id = db_connect('sample_db');

$result = mysql_query("SELECT * FROM user", $link_id);

for($i = mysql_num_rows($result)-1; $i >=0; $i--){

mysql_data_seek($result, $i);

$query_data = mysql_fetch_array($result); echo "'", $query_data["userid"], "' - ", $query_data["username"], "<P>";

}

?>

В этом разделе были рассмотрены различные способы доступа к результирующему множеству из PHP+сценариев. Эти методики помогают найти решение в различных ситуациях и вывести необходимые данные, представленные в том порядке, который требуется. Однако это еще далеко не все.

Известно, что повысить эффективность сценариев можно путем сохранения не+ больших размеров результирующего множества. В приведенных примерах для этого указывались необходимые поля в исходном SELECT+операторе, например:

$result = mysql_query("SELECT userid, username FROM user", $link_id);

Однако при отображении результатов этого запроса в другом порядке могут воз+ никнуть некоторые проблемы. Допустим, что данные нужно выводить в обратном или в алфавитном порядке. Хлопот можно избежать, если упорядочить данные, посту+ пающие в результирующее множество. На самом деле существует множество вариан+ тов обработки данных, эффективность которых, как по времени выполнения, так и по сложности, почти наверняка будет выше, если использовать хорошо продуман+ ные SQL+запросы, а не специальные PHP+функции. По этой причине следует вернуть+ ся к mysql+клиенту и рассмотреть возможности, предоставляемые командой SELECT.

SQL-операторы для выборки данных

Рассмотрим команду SELECT подробнее. Обратите внимание, что все описывае+ мые здесь команды полностью применимы к предыдущим примерам с использовани+ ем PHP ++++++ таблица, отображаемая в командной строке, представляет собой просто эк+ ранное представление результирующего множества, с которым в конечном итоге должен работать PHP+сценарий.

Серверные функции

Вернемся к основам и попытаемся вводить SELECT+запросы, которые вообще не требуют наличия таблицы базы данных. MySQL обладает множеством весьма полез+ ных встроенных серверных функций. Например, чтобы узнать текущее время, можно ввести следующую команду:

mysql> SELECT now();

 

+----------------------------

 

 

+

| now()

 

|

+----------------------------

 

 

+

| 2004-08-03

16:56:03

|

+----------------------------

 

 

+

1

row in set

(0.00 sec)

 

422 Глава 10

Функция now() возвращает текущее время для системы, на которой работает MySQL+ сервер. Чтобы получить текущую дату и время по отдельности, используются функции curdate() и curtime() соответственно:

mysql> SELECT

curdate(), curtime();

+-------

-----

+--------------

+

| curdate()

| curtime()

|

+-------------

 

+--------------

+

| 2004-08-03

| 16:57:19

|

+-------------

 

+--------------

+

1

row in set

(0.00 sec)

 

Многие из встроенных функций MySQL+сервера очень похожи на PHP+функции как в отношении синтаксиса, так и в отношении решаемых задач. Тем не менее, существуют определенные тонкие различия. Например, функция MySQL+сервера substring() ра+ ботает почти так же, как и PHP+функция substr(), но первая возвращает подстроку, начиная отсчет с единицы, тогда как вторая начинает отсчет с нуля:

mysql> SELECT substring('test',1,1); +-----------------------+

| substring('test',1,1) |

+-----------------------

 

+

| t

|

+-----------------------

 

+

1

row in set (0.54 sec)

 

Эквивалентный вызов PHP+функции substr() будет выглядеть так:

$substring = substr('test', 0, 1);

Выбираемые поля

Ранее уже было показано, как получать информацию из таблицы базы данных. Чтобы получить содержимое поля userid в таблице user, достаточно ввести команду:

mysql> SELECT userid FROM user;

+----------

+

| userid

|

+----------+

| Dodge

|

| Greeny

|

| Mac

|

| Nicrot

|

| Pads

|

| Spargy

|

+----------

+

6 rows in set (0.05 sec)

Очевидно, что в таблице user имеется шесть записей. (Обратите внимание на то, что ни имена полей, ни имена таблиц не содержат пробелов; имена должны вводиться как одно слово, так же, как имена переменных в PHP.)

Можно одновременно извлечь данные из нескольких полей, разделяя имена полей запятыми:

mysql> SELECT userid, username FROM user;

+---------

+-------------------------

+

| userid

| username

|

+---------

+-------------------------

+

| Nicrot

| Nic Malan

|

| Spargy

| Andrew Sparg

|

| Pads

| Brian Reid

|

Соседние файлы в папке web - tec