Анатолий Мотев СанктПетербург бхвпетербург 2006 удк 681 06 ббк 32. 973. 26018. 2 М85
Скачать 4.25 Mb.
|
Ссылка 1 Ссылка 2 { echo "Вы нажали ссылку 1"; } ×àñòü IV. PHP è MySQL 182 if($action==2) { echo "Вы нажали ссылку 2"; } ?> ПРИЛОЖЕНИЯ Ïðèëîæåíèå 1. Ñïèñîê çàðåçåðâèðîâàííûõ ñëîâ MySQL Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL Ïðèëîæåíèå 3. Îòâåòû íà âîïðîñû è çàäàíèÿ äëÿ ñàìîêîíòðîëÿ Ïðèëîæåíèå 4. Îïèñàíèå êîìïàêò-äèñêà ÏÐÈËÎÆÅÍÈÅ 1 Ñïèñîê çàðåçåðâèðîâàííûõ ñëîâ MySQL Здесь приведены зарезервированные слова, которые нежелательно использо- вать при именовании таблиц MySQL и их полей. ADD ALL ALTER ANALYZE AND AS ASC ASENSITIVE BEFORE BETWEEN BIGINT BINARY BLOB BOTH BY CALL CASCADE CASE CHANGE CHAR CHARACTER CHECK COLLATE COLUMN CONDITION CONNECTION CONSTRAINT CONTINUE CONVERT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR DEFAULT DATABASE DATABASES DAY_HOUR DAY_MICROSECOND DAY_MINUTE DAY_SECOND DEC DECIMAL DECLARE DELAYED DELETE DESC DESCRIBE DETERMINISTIC DISTINCT DISTINCTROW DIV DOUBLE DROP DUAL EACH ELSE ELSEIF ENCLOSED ESCAPED EXISTS EXIT EXPLANE FALSE FETCH FLOAT FOR FOR FORCE FOREIGN FULLTEXT GOTO GRANT GROUP HAVING HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE HOUR_SECOND Ïðèëîæåíèÿ 186 IF IGNORE IN INDEX INFILE INNER INOUT INSENSITIVE INSERT INT INTEGER INTERVAL INTO IS ITERATE JOIN KEY KEYS KILL LEADING LEAVE LEFT LIKE LIMIT LINES LOAD LOCALTIME LOCALTIMESTAMP LOCK LONG LONGBLOB LONGTEXT LOOP LOW_PRIORITY MATCH MEDIUMBLOB MEDIUMINT MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND MINUTE_SECOND MOD MODIFIES NATURAL NO_WRITE_TO_BINLOG NOT NULL NUMERIC ON OPTIMIZE OPTION OPTIONALLY OR ORDER OUT OUTER OUTFILE PRECISION PRIMARY PROCEDURE PURGE READ READS REAL REFERENCES REGEXP RENAME REPEAT REPLACE REQUIRE RESTRICT RETURN REVOKE RIGHT RLIKE SCHEMA SCHEMAS SECOND_MICROSECOND SELECT SENSITIVE SEPARATOR SET SHOW SMALLINT SONAME SPATIAL SPECIFIC SQL SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT SQLEXCEPTION SQLSTATE SQLWARNING SSL STARTING STRAIGHT_JOIN TABLE TERMINATED THEN TINYBLOB TINYINT TINYTEXT TO TRAILING TRIGGER TRUE UNDO UNION UNIQUE UNLOCK UNSIGNED UPDATE USAGE USE USING UTC_DATE UTC_TIME UTC_TIMESTAMP VALUES VARBINARY VARCHAR VARCHARACTER VARYING WHEN WHERE WHILE WITH WRITE XOR YEAR_MONTH ZEROFILL ÏÐÈËÎÆÅÍÈÅ 2 Èíòåðôåéñ PHP API äëÿ MySQL В этом приложении приведены функции PHP API. При описании синтаксиса вызова многих функций используется идентификатор соединения (параметр connect_id ), определяющий соединение с сервером MySQL, а также иденти- фикатор результата (параметр result_id ), обычно возвращаемый функцией mysql_query() . Если идентификатор соединения не определен, используется последнее открытое соединение. Все необязательные аргументы функций заключены в квадратные скобки ( [] ). mysql_affected_rows Функция mysql_affected_rows() возвращает количество строк, использован- ных предыдущими MySQL-операциями. Синтаксис вызова: int mysql_affected_rows([resource connect_id]); Функция возвращает количество строк, использованных запросами INSERT , UPDATE , REPLACE или DELETE на сервере, связываемом с определенным иденти- фикатором соединения. Если последним запросом был запрос DELETE без ус- ловия WHERE , все записи будут удалены из таблицы, но эта функция возвратит нуль. Эта функция не действует при запросе SELECT (она действует только при за- просах, изменяющих записи). Чтобы получить количество строк возвращен- ных при выполнении запроса SELECT , используйте функцию mysql_num_rows() mysql_close Функция mysql_close() закрывает MySQL-соединение. Синтаксис вызова: bool mysql_close([resource connect_id]); Ïðèëîæåíèÿ 188 Возвращает значение: true — при успешном завершении, false — при ошибке. Функция mysql_close() закрывает связь с базой данных MySQL, ассоцииро- ванной с определенным идентификатором соединения. Помните, что это не всегда необходимо, т. к. непостоянные открытые соединения автоматически закрываются в конце выполнения сценария. Функция mysql_close() не закроет устойчивые соединения, сгенерированные функцией mysql_pconnect() mysql_connect Функция mysql_connect открывает соединение с MySQL-сервером. Синтаксис вызова: resource mysql_connect([string hostname [, string username [, string password [, bool new_connect]]]]); Функция возвращает правильный идентификатор соединения MySQL при успешном выполнении или значение false при ошибке. Функция mysql_connect() устанавливает соединение с MySQL-сервером. Все аргументы функции не являются обязательными, и если они пропущены, то устанавливаются по умолчанию — 'localhost' , имя пользователя, который владеет процессом, пустой пароль. Аргумент hostname также может содер- жать номер порта (подобно "localhost:3306" ). В случае повторного вызова функции mysql_connect() с теми же аргументами никакое новое соединение не установится — вместо этого будет возвращен идентификатор уже открытого соединения. Параметр new_connect , установ- ленный в значение true , меняет это поведение и заставляет функцию всегда открывать новое соединение. Как только выполнение сценария закончится, связь с сервером закроется, ес- ли оно не было явно закрыто более ранним вызовом mysql_close(). Пример: $id_con = mysql_connect("localhost", "mysql_user", "mysql_password") or die("Невозможно установить соединение"); print ("Соединение установлено"); mysql_close($id_con); ?> Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL 189 mysql_create_db Функция mysql_create_db() создает базу данных MySQL. Синтаксис вызова: bool mysql_create_db(string database_name [, resource connect_id]); Функция mysql_create_db() пытается создавать новую базу данных на серве- ре, связанном с определенным идентификатором соединения. Возвращает значение true при успехе и false при неудаче. mysql_data_seek Функция mysql_data_seek() перемещает внутренний указатель результата. Синтаксис вызова: int mysql_data_seek(resource result_id, int row_number); Возвращает значение: true — при успешном выполнении, false — при ошибке. Функция mysql_data_seek() перемещает внутренний указатель для заданного результирующего набора на заданную строку (каждый возвращаемый запро- сом SELECT результирующий набор содержит специальный курсор, указы- вающий на строку, которая будет возвращена при следующем вызове функ- ций выборки строк). mysql_db_query Функция mysql_db_query посылает MySQL-запрос. Синтаксис вызова: resource mysql_db_query(string database_name, string query [, resource connect_id]); Возвращает правильный идентификатор результата MySQL в результате за- проса или значение false при ошибке. Функция mysql_db_query() выбирает базу данных и выполняет запрос к ней. Выбирать БД при каждом запросе неэффективно, вместо этого рекомендую ис- пользовать функцию mysql_query(). mysql_drop_db Функция mysql_drop_db() удаляет базу данных MySQL. Синтаксис вызова: bool mysql_drop_db(string database_name [, resource connect_id]); Ïðèëîæåíèÿ 190 Возвращает значение: true — при успешном выполнении, false — при не- удачном завершении. mysql_errno Функция mysql_errno() возвращает номер сообщения об ошибке предыдущей операции MySQL. Синтаксис вызова: int mysql_errno([resource connect_id]); mysql_error Функция mysql_error возвращает текст сообщения об ошибке предыдущей операции MySQL. Синтаксис вызова: string mysql_error([resource connect_id]); mysql_escape_string Функция mysql_escape_string мнемонизирует строку для использования в функции mysql_query() . Синтаксис вызова: string mysql_escape_string(string str); Выделяет любые кавычки и другие специальные символы в аргументе str , предваряя их обратным слэшем ( \ ). mysql_fetch_array Функция mysql_fetch_array() возвращает результирующий набор как ассо- циативный массив или числовой массив. Синтаксис вызова: array mysql_fetch_array(resource result_id [, resource result_type]); Возвращает результат строки запроса как массив или значение false при от- сутствии результата. Функция mysql_fetch_array() является расширенной версией функции mysql_fetch_row() . Кроме того, что она сохраняет данные в пронумерованных элементах результатного массива, а также сохраняет ассоциативную связь, используя имена полей как ключи. Если два или более столбцов имеют оди- наковые имена, то связку ключ/значение получает последний из них. Чтобы получить доступ к другим полям с таким же именем, вы должны использо- вать индексы или задать псевдонимы ( alias ) для этих столбцов. Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL 191 Параметр result_type может принимать следующие значения: MYSQL_ASSOC — возвращаются значения только по индексам имен; MYSQL_NUM — возвращаются значения только по числовым индексам; MYSQL_BOTH — возвращаются значения по индексам обоих типов. mysql_fetch_assoc Функция mysql_fetch_assoc() возвращает результирующий набор как ассо- циативный массив. Синтаксис вызова: array mysql_fetch_assoc(resource result_id); Функция возвращает следующую строку заданного результирующего набора в виде ассоциативного массива или значение false , если строк больше нет. mysql_fetch_field Функция mysql_fetch_field() получает информацию о столбце из результата и возвращает ее как объект. Синтаксис вызова: object mysql_fetch_field(resource result_id [, int field_number]); Функцию mysql_fetch_field() можно использовать для получения информа- ции о поле в определенном результате запроса. Если параметры поля не ука- заны, то будет запрошено поле, которое еще не было запрошено функцией mysql_fetch_field() Свойства объекта: name — имя поля; table — имя таблицы, содержащей поле; max_length — длина наибольшего значения поля; not_null — 1, если поле не может принимать нулевые значения; primary_key — 1, если поле является первичным ключом; unique_key — 1, если поле является полем с уникальными значениями (имеет атрибут UNIQUE ); multiple_key — 1, если поле не является полем с уникальными значениями (не имеет атрибута UNIQUE ); numeric — 1, если поле числовое; blob — 1, если поле имее тип BLOB ; type — тип поля; Ïðèëîæåíèÿ 192 unsigned — 1, если поле беззнаковое; zerofill — 1, если поле имеет атрибут ZEROFILL mysql_fetch_lengths Функция mysql_fetch_lengths получает максимальный размер данных для каждого выходного значения. Синтаксис вызова: array mysql_fetch_lengths(resource result_id); Возвращает массив (нумерация элементов — с нуля), содержащий размеры полей последней строки, выбранной функцией mysql_fetch_row() , или значе- ние false при ошибке. mysql_fetch_object Функция mysql_fetch_object() получает строку результата как объект. Син- таксис вызова: object mysql_fetch_object(resource result_id [, resource result_type]); Возвращает объект со свойствами, который соответствует полученной стро- ке, или значение false , если нет результата. Функция mysql_fetch_object() подобна функции mysql_fetch_array() с од- ним отличием — вместо массива возвращается объект. Это означает, что вы можете иметь доступ к данным только по именам полей, а не по их парамет- рам (обращение по индексным числам в данном случае является неверным). Пример: $id_con=mysql_connect($host,$user,$password); $result_id = mysql_db_query("database_name","select * from table"); while($row = mysql_fetch_object($result)) { echo $row->last_name; echo $row->first_name; } mysql_free_result($result_id); ?> mysql_fetch_row Функция mysql_fetch_row() получает строку результата как пронумерован- ный массив. Синтаксис вызова: array mysql_fetch_row(resource result_id); Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL 193 Возвращает массив значений выбираемых полей или значение false , если нет результата. Функция mysql_fetch_row() выбирает поле данных из результата и связывает его с определенным идентификатором результата (индексом элемента масси- ва). Запрос возвращается как массив. Доступ к значениям можно получать через элементы массива. Последующий вызов функции mysql_fetch_row() должен возвратить следую- щую строку или значение false , если полей больше нет. mysql_field_flags Функция mysql_field_flags() получает флаги, ассоциированные с полем. Синтаксис вызова: string mysql_fields_flags(resource result_id, int field_number); Возвращает флаги специфицированного поля, разделенные пробелами (табл. П2.1). Òàáëèöà Ï2.1. Çíà÷åíèÿ ôóíêöèè mysql_field_flags() Свойство Значение auto_increment Поле имеет атрибут auto_increment binary Поле имеет атрибут binary blob Поле имеет тип Blob или Text enum Поле имеет тип Enum multiple_key Поле является частью неуникального индекса not_null Поле имеет атрибут not_null primary_key Поле является частью первичного ключа timestamp Поле имеет тип Timestamp unique_key Поле является частью индекса unique unsigned Поле имеет атрибут unsigned zerofill Поле имеет атрибут zerofill Для разделения флагов можно воспользоваться функцией explode() . Аргу- мент field_number задает индекс (номер) поля, начиная с 0. Ïðèëîæåíèÿ 194 mysql_field_len Функция mysql_field_len() возвращает длину поля. Синтаксис вызова: int mysql_field_len(resource result_id, int field_number); Функция возвращает максимальную возможную длину заданного поля. Ар- гумент field_number задает индекс (номер) поля, начиная с 0. mysql_field_name Функция mysql_field_name() получает имя определенного поля в результате. Синтаксис вызова: string mysql_field_name(resource result_id, int field_number); Функция mysql_field_name() возвращает имя указанного поля. Аргументами функции являются идентификатор результата и индекс поля, т. е. функция mysql_field_name($result,2) возвратит имя третьей области в результате, связанном с идентификатором результата ( $result ). mysql_field_seek Функция mysql_field_seek() устанавливает указатель запроса в определенное поле. Синтаксис вызова: int mysql_field_seek(resource result_id, int field_number); Функция осуществляет поиск в определенном поле. Если при следующем вы- зове функции mysql_fetch_field() поле не указано (отсутствует значение второго аргумента), то должно быть возвращено именно это поле. Возвраща- ет значение true , если поиск заданного поля завершился удачно, и значение false при неудаче. Аргумент field_number задает индекс (номер) поля, начи- ная с 0. mysql_field_table Функция mysql_field_table() получает имя таблицы, в которой находится указанное поле. Синтаксис вызова: string mysql_field_table(resource result_id, int field_number); Получает имя таблицы поля. Аргумент field_number задает индекс (номер) поля, начиная с 0. Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL 195 mysql_field_type Функция mysql_field_type() получает тип указанного поля в результате. Синтаксис вызова: string mysql_field_type(resource result_id, int field_number); Функция mysql_field_type() подобна функции mysql_field_name() . Аргумен- ты идентичны, но возвращается тип поля ( 'int' , 'real' , 'string' , 'blob' и т. п.). mysql_free_result Функция mysql_free_result() освобождает память результата. Синтаксис вы- зова: int mysql_free_result(resource result_id); Функцию mysql_free_result() нужно использовать, только если вы беспо- коитесь о слишком большом объеме памяти, занимаемой во время работы вашего скрипта. Вся используемая результатом память для определенного идентификатора результата будет освобождена автоматически. mysql_list_dbs Функция mysql_list_dbs() возвращает идентификатор результата, содержа- щего список имен баз данных, которые сервер относит к заданному соедине- нию. Синтаксис вызова: resource mysql_list_dbs([resource connect_id]); mysql_list_fields Функция mysql_list_fields() возвращает идентификатор результата со спи- ском полей таблицы. Синтаксис вызова: resource mysql_list_fields(string db_name, string table_name [, resource connect_id]); Обязательные аргументы — имя базы данных и имя таблицы. Идентификатор результата является положительным целым. Функция возвращает –1, если происходит ошибка. Строка описания ошибки будет помещена в переменную $phperrmsg , и если функция не была вызвана как @mysql() , то затем также бу- дет выведено это описание ошибки. Ïðèëîæåíèÿ 196 mysql_list_processes Функция mysql_list_processes() возвращает идентификатор результата, со- держащий информацию о текущих процессах, работающих на сервере. Син- таксис вызова: resource mysql_list_processes([, resource connect_id]); mysql_list_tables Функция mysql_list_tables() возвращает идентификатор результата со спи- ском имен таблиц заданной БД. Синтаксис вызова: resource mysql_list_tables(string db_name, [, resource connect_id]); Функция mysql_list_tables() принимает имя базы данных и указатель ре- зультата, подобно функции mysql_db_query() , и извлекает фактические имена таблиц. mysql_num_fields Функция mysql_num_fields() получает количество полей в указанном резуль- тате. Синтаксис вызова: int mysql_num_fields(resource result_id); mysql_num_rows Функция mysql_num_rows() получает количество строк в указанном результа- те. Синтаксис вызова: int mysql_num_rows(resource result_id); mysql_pconnect Функция mysql_pconnect() открывает устойчивое соединение с MySQL- сервером. Синтаксис вызова: int mysql_pconnect([string hostname [, string username [, string password]]]); Функция mysql_pconnect() возвращает правильный MySQL-идентификатор устойчивого соединения при успешном выполнении или значение false при ошибке. Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL 197 Функция mysql_pconnect() очень похожа на функцию mysql_connect() с дву- мя важными отличиями: при соединении функция должна сначала попытаться найти уже открытую устойчивую связь с тем же хостом, именем пользователя и паролем. Если она обнаруживается, возвратится ее идентификатор (вместо открытия но- вого соединения); соединение с сервером SQL не закроется, когда закончится выполнение сценария — соединение останется открытым для последующего использо- вания (функция mysql_close() не закрывает соединения, установленные функцией mysql_pconnect() ). Использование этой функции считается более эффективным методом соеди- нения. mysql_ping Функция mysql_ping() посылает сигнал серверу для соединения. Синтаксис вызова: bool mysql_ping([resource connect_id]); Функция mysql_ping() устанавливает повторное соединение с сервером, если время соединения вышло. Можно использовать ее в скриптах, которые дол- гое время не запускаются. Функция возвращает значение true , если соединение активно или было вновь восстановлено, и значение false в противном случае. mysql_query Функция mysql_query() отправляет SQL-запрос. Синтаксис вызова: int mysql_query(string query [, resource connect_id]); Функция mysql_query() посылает запрос к базе данных для заданного соеди- нения. Если аргумент connect_id не указан, используется последнее открытое соединение. Если соединение не открыто, функция пытается установить со- единение (как если бы была вызвана функция mysql_connect() ) и использует его. Эта функция возвращает значение true или false , чтобы показать успешность выполнения запросов UPDATE , INSERT и DELETE . Успешным считается запрос, выполненный без единой ошибки. Для запроса SELECT она возвращает новый идентификатор результата. Ïðèëîæåíèÿ 198 mysql_result Функция mysql_result() получает данные результата. Синтаксис вызова: mixed mysql_result(resource result_id, int row, mixed field); Функция mysql_result() возвращает содержимое одной ячейки из результата с указанным идентификатором. Аргумент field может быть задан порядко- вым номером, или именем поля, или параметром типа имя_таблицы.имя_поля Работая с большими результатами, вы должны предусматривать использова- ние одной из функций, выбирающих целую строку. За счет того что эти функции возвращают содержимое большого числа ячеек за один вызов функ- ции, они выполняются значительно быстрее, чем функция mysql_result() Также имейте в виду, что если аргумент field задан как числовой параметр, функция mysql_result() выполняется значительно быстрее, чем если он задан как имя_поля или как аргумент типа имя_таблицы.имя_поля Вызов функции mysql_result() не следует смешивать с вызовами других функций, имеющих дело с установленным результатом. mysql_select_db Функция mysql_select_db() выбирает базу данных MySQL. Синтаксис вызова: int mysql_select_db(string db_name [, resource connect_id]); Возвращает значение true при успешном выполнении и значение false при ошибке. Функция mysql_select_db() определяет текущую активную базу данных на сервере, связанную с указанным идентификатором соединения. Если иденти- фикатор соединения не определен, то принимается последнее открытое со- единение. Каждый последующий вызов функции mysql_query() относится к активной базе данных. Èíôîðìàöèîííûå ôóíêöèè В этот раздел вынесены функции, возвращающие различную информацию: string mysql_get_client_info(void) — возвращает версию клиентской библиотеки; string mysql_get_host_info([resource connect_id]) — возвращает описа- ние заданного соединения; Ïðèëîæåíèå 2. Èíòåðôåéñ PHP API äëÿ MySQL 199 int mysql_get_proto_info([resource connect_id]) — возвращает версию протокола; string mysql_get_server_info([resource connect_id]) — возвращает вер- сию сервера; string mysql_info() — возвращает подробную информацию о последнем запросе; string mysql_stat([resource connect_id]) — возвращает информацию о статусе сервера; int mysql_thread_id([resource connect_id]) — возвращает идентифика- тор процесса, связанного с данным идентификатором соединения; string mysql_character_set_name([resource connect_id]) — возвращает название кодировки для текущего соединения. ÏÐÈËÎÆÅÍÈÅ 3 Îòâåòû íà âîïðîñû è çàäàíèÿ äëÿ ñàìîêîíòðîëÿ В данном приложении даны ответы на все контрольные вопросы и задания, которые есть в книге. Óðîê 3 ВОПРОС 1. Какие четыре базовых текстовых типа поддерживает MySQL? Ответ: CHAR , VARCHAR , TEXT , BLOB ВОПРОС 2. Сколько памяти требуется для хранения значения поля типа SMALLINT ? Ответ: 2 байта. ВОПРОС 3. Каков диапазон допустимых значений для типа YEAR ? Ответ: От 1901 до 2155. ВОПРОС 4. Какие типы таблиц MySQL вы можете использовать? Ответ: ISAM , MyISAM , HEAP , BDB , InnoDB , MERGE ВОПРОС 5. Какой тип определен по умолчанию? Ответ: MyISAM ВОПРОС 6. Какой тип можно использовать для временного хранения дан- ных? Ответ: HEAP Óðîê 7 ВОПРОС 1. Какие операторы можно использовать для удаления индекса? Ответ: Удалить индекс можно с помощью оператора DROP INDEX или ALTER TABLE Ïðèëîæåíèå 3. Îòâåòû íà âîïðîñû è çàäàíèÿ äëÿ ñàìîêîíòðîëÿ 201 ВОПРОС 2. Какие типы индексов можно создавать в MySQL? Ответ: В MySQL можно создавать следующие типы индексов: обычный индекс; уникальный индекс; индекс типа FULLTEXT Óðîê 8 ВОПРОС 1. Какая опция оператора ALTER TABLE позволяет удалить поле таб- лицы? Ответ: Опция DROP ВОПРОС 2. Какие ключевые слова используются для указания позиции до- бавляемого поля? Ответ: Ключевые слова FIRST и AFTER Óðîê 17 ЗАДАНИЕ 1. Напишите сценарий для просмотра информации о книгах (на- звания и количество экземпляров). Возможный сценарий приведен в листинге П3.1. Листинг П3.1. Пример решения задания 1 ?> |