Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

32.2. Функции получения доступа

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

• mysql_affected_rows(),

• mysql_db_name(),

• mysql_fetch_field(),

• mysql_fetch_row(),

• mysql_field_flags(),

• mysql_field_name(),

• mysql_field_table(),

• mysql_field_type(),

• mysql_num_fields(),

• mysql_tablename().

Функция mysql_affected_rows() позволяет получить число строк, на которые воздействует последний UPDATE, DELETE или INSERT, т. е. число строк, активных в предыдущей операции MySQL. Функция mysql_affected_rows() имеет следующий синтаксис:

int mysql_affected_rows([int link_identifier])

Функция возвращает нуль, больше нуля или минус один. Если идентификатор связи link_identifier не определен, функция примет по умолчанию последнюю связь, открытую функцией mysql_connect() (с принципами работы этой функции вы ознакомитесь далее).

Функция mysql_affected_rows() показывает число измененных строк, если возвращаемое значение больше нуля. Если возращается нуль, то никакие записи не соответствовали значениям полей WHERE в UPDATE или DELETE. Когда сам запрос возвратит ошибку, то значение целого число будет равно минус единице. Ошибкой считается, например, попытка добавить двойной первичный ключ в течение одного INSERT.


ВНИМАНИЕ

При использовании UPDATE MySQL не будет модифицировать столбцы, в которых новое значение подобно старому. Данное явление позволяет увидеть, что mysql_affected_rows() не может фактически равняться числу согласованных строк, а только количеству строк, на которые непосредственно воздействовал запрос.


Mysql_affected_rows() не работает с инструкциями SELECT, а только с инструкциями, которые модифицируют записи. Чтобы получить количество строк, возвращенных инструкцией SELECT, используют функцию mysql_num_rows() [int link_identifier].

Пример 32.1. Получение доступа. Файл test.php

<?php

$mydate = mysql_connect("localhost", "username", "password");

mysql_select_db("database", $mydate);

$intres = mysql_query("SELECT * FROM table1", $mydate);

$introw = mysql_affected_rows($mydate);

$num_rows = mysql_num_rows($intres);

echo "$num_rows Rows\n";

echo "$introw \n";

?>

Опишем принцип работы данного примера. Функция mysql_connect() позволяет установить соединение с сервером MySQL. На данном этапе не стоит сильно обращать внимание на параметры, указанные в данной функции. После соединения с сервером MySQL необходимо соединиться с базой данных, указанной в переменной $mydate, на сервере, указанном под именем database. Для реализации этой задачи используется функция mysql_select_db(). Далее выполняется SQL-запрос, заданный в качестве переменной $nrydate к базе данных, указанной как SELECT * FRCM table1. Эта операция осуществляется при помощи функции mysql_query().

Функция mysql_affected_rows() используется В PHP 3 и PHP 4.

Чтобы получить результат, необходимо воспользоваться функцией mysql_db_name(). Ее синтаксис:

int mysql_db_name(int result, int row[, mixed field])

Mysql_db_name() возвращает целое число. В качестве параметра result применяется результирующий указатель из вызова функции mysql_list_dbs(). Параметр row является введением в набор результатов.

В случае возникновения ошибки возвращается false. Чтобы определить ее характер, используют функции mysql_errno() и mysql_error().

Пример 32.2. Получение доступа. Файл index.php

<?php

mysql_connect('localhost', 'username', 'password');

$list = mysql_list_dbs() ;

$i = 0;

$cnt = mysql_num_rows($list);

while ($i < $cnt) {

    echo mysql_db_name($list, $i) . "\n";

    $i++;

}

?>

Функция mysql_db_name() применяется в PHP 3-3.0.6 и PHP 4.

Чтобы получить столбец информации результата и возвратить его в качестве объекта, используют функцию mysql_fetch_field(). Она позволяет возвратить объект, содержащий поле информации (табл. 32.1). Ее синтаксис:

object mysql_fetch_field(int result [, int field_offset] )

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

Таблица 32.1. Свойства объекта, возвращаемые функцией mysql_fetch_field()

Функция mysql_fetch_row() возвращает массив, который соответствует определенной строке или false, если больше нет строк. Синтаксис функции:

array mysql_fetch_row(int result)

mysql_fetch_row() выбирает одну строку данных, связанную с указанным идентификатором result. Строка возвращается как массив. Каждый столбец сохраняется в матричном смещении, начинающемся в смещении 0.

Последующий запрос к функции возвратит следующую строку в наборе результатов или false, если больше строк не существует.

Рассмотрим пример:

<?php

mysql_connect($host, $user, $password) or die ("Could not connect");

$result = mysql_db_query("database", "select * from table") or die ("Query failed");

// получаем данные столбца

$i = 0;

while ($i < mysql_num_fields($result) ) {

    echo "Information for column $i:<br>\n";

    $meta = mysql_fetch_field($result);

    if(!$meta) {

        echo "No information available<br>\n";

    }

    echo "<pre>

        blob: $meta->blob

        max_length : $meta->max_length

        multiple_key : $meta->multiple_key

        name : $meta->name

        not_null: $meta->not_null

        numeric: $meta->numeric

        primary_key: $meta->primary_key

        table: $meta->table

        type; $meta->type

        unique_key : $meta->unique_key

        unsigned: $meta->unsigned

        zerofill: $meta->zerofill

        </pre>";

    $i++;

}

mysql_free_result($result);

?>

Функции mysql_fetch_field() и mysql_fetch_row() работают в PHP 3 и PHP 4.

Функции mysql_field_flags(), mysql_field_name(), mysql_field_table(), mysql_field__type() позволяют осуществлять разнообразные манипуляции с флагами. Функция mysql_field_flags() возвращает флаги указанного поля. Ее синтаксис:

string mysql_field_f lags (int result, int field_offset)

Соответствующий флаг будет возвращен в качестве строки.

Флаги, возвращаемые функцией mysql_field_flags(), могут быть следующие: not_null, primary_key, unique_key, multiple_key, blob, unsigned, zerofill, binary, enum, auto_increment, timestamp.

Чтобы получить название указанного поля, необходимо воспользоваться функцией mysql_field_name(). Функция имеет такой же синтаксис, как и mysql_field_flags().


ВНИМАНИЕ

Параметр field_offset начинается с нуля.

Рассмотрим пример:

// таблица пользователя состоит из трех областей:

// lockalhost

// lockalhost1

// lockalhost2

$res = mysql_db_query("users", "select * from users", Slink);

echo mysql_field_name($res, 0) . "\n";

echo mysql_field_name($res, 2);

В результате работы данного примера получим следующий результат:

lockalhost

lockalhost2

Функция mysql_field_table() позволяет получить имя таблицы. Функция имеет схожий синтаксис с ранее описанными функциями и также возвращает строку.

Для определения типа поля используют функцию mysql_fields_type(). Тип поля может быть следующим: int, real, string, blob и др.

Рассмотрим пример:

<?php

mysql_connect("localhost:3306");

mysql_select_db("Wisconsin");

$result = mysql_query("SELECT * FROM onek");

$fields = mysql_num_fields($result);

$rows = mysql_num_rows($result);

$i = 0;

$table = mysql_field_table($result, $i);

echo "Your '".$table."' table has ".$fields." fields and ".$rows. " records<br>";

echo "The table has the following fields <br>";

while ($i < $fields) {

    $type = mysql_field_type ($result, $i);

    $name = mysql_field_name ($result, $i);

    $len = mysql_field_len ($result, $i);

    $flags = mysql_field_flags ($result, $i);

    echo $type." ",$name." ".$len." " . $flags."<br>";

    $i++;

}

mysql_close();

?>

Рассмотренные функции работают в PHP 3 и PHP 4.

Чтобы получить в качестве результата количество полей, используют функцию mysql_num_fields(). Ее синтаксис:

int mysql_num_fields (int result)

Функция возвращает целое число.

Функция mysql_tablename() позволяет получить имя поля таблицы. Функция имеет следующий синтаксис:

string mysql_tablename (int result, int i)

Функция использует указатель result, возвращенный функцией как целочисленный индекс и выводит название таблицы. Функция () может быть использована, чтобы определить число таблиц в поле, указанном параметром result. Например:

<?php

mysql_connect ("localhost:3306");

$result = mysql_list_tables ("Wisconsin");

$i = 0;

while ($i < mysql_num_rows ($result) ) {

    $tb_names[$i] = mysql_tablename ($result, $i);

    echo $tb_names[$i]. "<br>";

    $i++;

}

?>

Функции mysql_num_fields() и mysql_tablename() используются в PHP 3 и PHP 4.

<< Предыдущий параграф Следующий параграф >>
Оглавление