Процедурный стиль работы с MySQL

May 4, 2010 by admin Комментировать »

Функция mysqli_connect()

Функция mysqli_connect о устанавливает подключение к серверу MySQL. Неполный формат записи данной функции следующий.

mysqli inysqli_connect ( [string host [, string username [, string passwd [, string dbname [, int port]]]]] )

Перед тем как приступить к работе с сервером базы данных, к нему необходимо подключиться. При подключении прежде всего укажите адрес сервера, к которому нужно подключиться (параметр host), имя и пароль пользователя, с правами ко­торых будут осуществляться операции (параметры username и passwd соответст­венно), имя базы данных и порт, с помощью которого будет производиться под­ключение. Все параметры являются опциональными.

На практике для подключения к базе данных функция mysqli_connect () мо­жет использоваться следующим образом.

$dbh = mysqli_connect("localhost","user","pass","mytest");

Результирующее значение, возвращаемое функцией, записывается в перемен­ную mytest. Это — указатель на подключение, который будет в дальнейшем ис­пользоваться для однозначной идентификации данного подключения, так как их может быть и несколько.

Функция mysqli_close()

Функция mysqli_close () закрывает открытое раньше соединение. Формат за­писи функции следующий.

bool mysqli_close ( mysqli link

В качестве параметра link передается указатель на подключение, которое необ­ходимо закрыть, например:

<?php

$dbh = mysqli_connect("localhost","user","pass","mytest");

mysqli_close($dbh);

?>

Функция возвращает значение TRUE в случае удачного закрытия подключения или FALSE — в том случае, если при закрытии подключения произошла ошибка.

Функция mysqli_connect_eTror()

Если при подключении к MySQL произошел какой-либо сбой, то функция mysqli_connect_error () возвратит строку с текстом ошибки, произошедшей при последнем подключении. Формат ее записи следующий.

string inysqli_connect_error ( void 1

Рассмотрим пример, в котором произойдет попытка подключения к несущест­вующему хосту с базой данных.

<?php

//Подавление вывода системных ошибок

error_reporting(0); ^

$dbh = inysqlj._connect {"wrong_hv^=.l • , "user" , "pass", "mytest" ) ; if (!$dbh) {

echo "MySi,i говорит об ошибке: • inysqli_connect_error () ;

}

else {

echo "Ура, подключились 1"

}

mysqli_close($dbh); ?>

Если на машине не существует хоста wrong_hosL, то будет выдано следующее сообщение.

MySQL говорит об ошибке: Jnknown MySQL server host •wrong_host’ ."•

Обратите внимание на то, что перед подключением была использована функция для подавления вывода ошибок error re ц rting (). Без нее на экран была бы вы­ведена следующая информация.

Warning: mysqli_connect () [fi… tion.mysgld conn<- >. I (HYOOO/2005) : Unknown My9>3L server lr#:st ?wrona_hoot (2) in www/htdocs/index.php on Line

MyrOL говорит об ошибке: "r.tn/’, * QL server host ‘wrong_host• 12

Warning: mysqli_”lose () expe’-ts parameter 1 to be mysqli, boolean given in www htdocs j.ndex.php on line 16

Такие данные могут быть полезны при отладке, но они не очень "приятно смот­рятся" в уже готовых приложениях.

Функция mysqli_query()

Функция mysqli_query () осуществляет запрос к базе данных. Формат записи функции следующий.

mixed mysqli_query ( mysqli Link, string query [, int resultmode] i

Здесь в параметр link передается указатель на соединение с базой данных, в па­раметре query указывается текст SQL-запроса, который необходимо выполнить. Опциональный параметр reeultmi-^ie управляет режимом использования возвра­щаемого результата. Режим использования может быть записан в двух вариантах

• MYSQLI_STORE_RESULT. При указании данной константы в параметре resultmode, если SQL-запрос должен вернуть некую выборку данных, ее возврат сохраняется и может быть использован любыми средствами языка (например, выведен в цикле на экран). При этом в скрипте может быть вы­полнен еще один или несколько SQL-запросов. Данный параметр использует­ся по умолчанию и может быть опущен.

• MYSQLI_USE_RESULT. При использовании данной константы в параметре resultmode результат запроса не буферизуется, и пока память не будет очи­щена с помощью функции mysqli_f ree_result (), других запросов в скрипте выполнить не удастся — система сообщит об ошибке.

Рассмотрим пример выполнения SQL-запроса на добавление данных в базу.

<?php

$link = inysqli_connect("localhost", "user", "pass", "mytest");

$guery = "insert into friends values (NULL, ‘Anna’)"’ $result = mysqli_query($link, $query);

mysqli_close(Slink); ?>

В данном примере будет выполнен следующий SQL-запрос, insert into friends values (NULL, ‘Anna’)

В результате в таблицу friends добавится одна запись. В качестве запроса можно подставить абсолютно любой другой SQL-запрос, и он будет выполнен (с ошибкой или без). Однако выполнить запрос в некоторых случаях бывает недос­таточно. В запросе на выборку SELECT данная функция вернет результат с выбран­ными из базы данными, и их нужно будет обработать дополнительно.

Функция mysqli_fetch_array()

Функция nr/sqli_j.etch_array () преобразует результат запроса mysqli_query () в обычный массив. Формат записи функции следующий.

mixed mysqli_fetch_array ( mysqli_result result [, int resulttype] )

Здесь в параметр result передается результат использования mysqli_query () В необязательном параметре resulttype можно установить тип возвращаемого массива. Для указания типа используются следующие константы:

• MYSQLI_NUM. При указании данной константы возвращаемые значения будут доступны в виде элементов индексного массива. Каждое поле из строки базы данных будет пронумеровано, начиная с нуля, т.е. поля каждой записи будут доступны по их порядковому номеру, например:

$агг[0] и $агг[1];

• MYSQLI_ASSOC. Использование данной константы требует от функции mysqli_fetch_array() представить выборку в виде ассоциативного мас­сива. Каждое поле будет доступно под своим именем, например $агг [" f riend_name" ], либо, если в SQL-запросе применялись псевдонимы полей, то под именем псевдонима;

• MYSQLI_BOTH. Это значение параметра resulttype установлено по умолча­нию. Функция с такой константой в параметре вернет выборку данных в виде и индексного, и ассоциативного массивов.

Рассмотрим пример выборки данных из таблицы.

<?php

$link = inysqli_connect("localhost", "user", "pass", "mytest");

$guery – "select * from friends"; $result = mysqli_query($link, $guery);

echo "Мои друзья:<br>";

while($row = mysqli_fetch_array($result)) {

echo $row["friend_id"] " " . $row["friend_name"]

" <br>";

)

mysqli_close($link) ; ?>

В результате выполнения данного кода на экран будет выведено содержимое таблицы friends. Оно может выглядеть так

Мои друзья:

1. John

2. fred

3. Anna

Если бы функция mysql_f etch_array () использовалась с параметром result type, равным MYSQLI_NUM, то перебор значений в выборке мог бы осуществляться следующим образом.

while(5row = mysqli_fetch_array($result,MYSQLI_NUM))

echo $row[0] . ". " . $row[l] . " <br>";

}

Результат вывода был бы тем же.

Функции mysqli_prepare(), mysqli_stmt_bind_param(), mysqli_stmt_close( ), mysqli_stmt_execute( )

Данные функции представлены вместе, так как реализуют механизм подготов­ленных выражений (prepared statements). Суть подготовленных выражений состо­ит в том, что создается один шаблон запроса, в который потом передаются различ­ные параметры. Таким образом достигается большая производительность, особен­но при большом количестве запросов, так как серверу сам запрос передается один раз, а потом отправляются только необходимые параметры, также данный меха­низм обеспечивает большую безопасность от SQL-атак.

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

mixed mysqli_prepare ( mysqli link, string query i

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

$prep_query = mysqli_prepare($link,"insert into friends values (NULL,?)");

Как можно заметить, в SQL-запросе вместо имени, которое здесь должно было быть по логике, вставлен знак вопроса. После того как подготовлен шаблон, необ­ходимо на место знака вопроса подставить нужный параметр с помощью функции mysqli_stmt_bind_param(). Формат записи функции следующий

bool mysqli_stmt_bind_parcim ( mysqli_stmt stmt, string types, mixed Svarl [, mixed &…] )

Здесь параметр stmt — это указатель на подготовленное выражение (опреде­ленный в mysql i_prepare), затем следует список типов подставляемых данных, а после всего этого — список подставляемых переменных через запятую (если их несколько).

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

bool mysqli_stmt_execute ( mysqli_stmt stmt ‘

В качестве единственного параметра передается указатель на подготовленное вы­ражение, которое необходимо выполнить. После окончания работы с подготовлен­ным выражением его нужно закрыть с помощью функции mysql i_stmt_c lose ().

Рассмотрим пример использования подготовленных выражений для подстанов­ки параметров в запрос перед выполнением.

<?php

$link = mysqli_connect("localhost", "user", "pass", "mytest");

//Элементы, которые нужно добавить в баву данных

$my_friends = array("Ben", "Lisy", ‘Rasmus");

//Шаблон подготавливается только один раз

$prep_query = mysqli_prepare($link,"insert into friends values (NULL,?)");

foreach ($my_friends as $friend) {

mysqli_stmt_bind__parcmi($prep_query,"s",$friend); mysqli_stmt_execute($prep_guery);

}

mysqli_stmt_close($prep_query);

mysqli_close($link);

?>

в данном примере имеется массив $iny_f riends с именами друзей, которых не­обходимо записать в таблицу friends. При обыкновенном подходе нам бы при­шлось выполнять три SQL-запроса целиком, но в случае с подготовленными выра­жениями трижды были переданы только параметры.

Приведенный выше пример реализует механизм подготовленных выражений для вставки параметров в запрос, но подготовленные выражения могут использо­ваться и для других целей — для работы с результатами выборки SQL-запроса.

Функции mysqli_stmt_bind_result(), mysqli_stmt_fetch()

Данные функции также используются в подготовленных выражениях, но толь­ко для того, чтобы обработать результат SQL-запроса на выборку данных из базы.

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

bool mysqli_stint_bind_result ( inysqli_stitit stmt, mixed &varl [, mixed &…] )

Параметр stmt означает указатель на подготовленное выражение, а за ним через запятую следуют переменные, в которые будет занесена информация из результа­тов выборки. При этом первой переменной будет соответствовать первое поле из выборки, второй переменной второе и т.д. Функция mysql i_stmt_f etch () помо­жет обработать данные выборки для вывода на экран.

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

<?php

$link = mysqli_connect{"localhost" "user", "pass", "mytest");

$prep_query = mysqli_prepare($link,"SELECT * FROM friends"); mysqli_stmt_execute($prep_query);

mysqli_stmt_bind_result($prep_guery,$coll,$col2); while(mysqli_stmt_fetch($prep_query)) { echo "(" . $coll . ") " . $col2 . "<br>";

}

mysqli_close($link)i ?>

Результат может быть примерно следующим.

(1) John

(2) fred

(3) Anna

(4) Alex

Оба способа применения подготовленных выражений могут быть использованы одновременно.

функция mysqli_affected_rows()

Функция inysqli_af f ected_rows () сообщает количество строк, используемых в последней операции. Формат записи функции следующий.

mixed mysqli_affected_rows ( mysqli link ‘

Если существует необходимость узнать, сколько строк было использовано в по­следней операции (например, удаления), то нужно применить функцию mysqli_af f ected_rows (). Пример использования.

<?php

$link = mysqli_connect("localhost", "user", "pass", "mytest");

$sql = "delete from friends where friend_id > 3"; $result = mysqli_query($link, $sql); echo mysqli_affected_rows($link);

mysqli_close($link); ?>

В данном примере происходит попытка удалить из таблицы friends все записи, в которых f riend_id больше трех. Количество подпадающих под это условие за­писей может быть неизвестно, но функция mysqli_af f ected_rows () снимает эту неизвестность.

Функция mysqli_insert_id()

Функция mysqli_insert_id() возвращает id последней вставленной записи. Формат записи следующий.

mixed mysqli_insert_id ( mysqli link )

Эта функция особенно актуальна в тех случаях, когда первичный ключ записи (id) является полем с автоинкрементом, т.е. увеличивается при каждой вставке ав­томатически. В некоторых случаях разработчику после вставки записи необходимо знать присвоенный ей id (например, для внесения его в другую таблицу). Исполь­зуется функция следующим образом.

<?php

$link = mysqli_connect("localhost", "user", "pass", "mytesc");

$sql = "insert into friends values (NULL, ‘Bob’}*"; $result = mysqli_query(Slink, $sql); echo mysqli_insert_id(Slink);

mysqli_close(Slink); ?>

В данном примере на экран будет выведено значение friend_id последней записи.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты