int mysql_db_query(string database, string query

[int database_connection]);

Здесь можно указать базу данных, в которой требуется производить поиск. В каком-то смысле это комбинация функций mysql_select_db() и mysql_query(). Обе функции возвращают идентификатор результата (что позволяет получить результаты поиска) в случае успеха и значение false в случае неудачи. Идентификатор результата следует сохранить (так же, как в нашем случае с $result), чтобы извлечь из него некоторую пользу.

Получение результатов запроса. Разнообразие функций дает возможность получить результат различными способами. Идентификатор результата — это ключ доступа к строкам, возвращенным запросом, которых может быть нуль, одна и более.

В нашем примере использовались две функции: mysql_numrows() и mysql_fetch_array().

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

$num_results = mysql_num_rows($result);

Это полезно знать, если планируется обрабатывать или отображать результаты. Зная их количество, можно организовать цикл:

for ($i=0; $i <num_results; $i++)

{ // обработка результатов

}

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

$row = mysql_fetch_array($result);

Имея $row в ассоциативном массиве, можно пройти каждое поле и отобразить его:

echo "<br> Автор: ";

echo stripslashes($row["author"]);

Как уже упоминалось, stripslashes() вызывают для того, чтобы "подчистить" значение, прежде чем отображать его пользователю.

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

$ row = mysql_fetch_row($result);

Значения атрибутов будут храниться в каждом порядковом значении $row[0], $row[l] и т.д.

С помощью функции mysql_fetch_object() можно выбрать строку внутрь объекта:

$row = mysql_fetch_object ($result);

После этого к атрибутам можно получить доступ через $row->title, $row->author и т.д.

Каждый из этих вариантов подразумевает выборку строки за раз. Другой вариант — получить доступ, используя mysql_result() Для этого потребуется указать номер строки (от 0 до количества строк минус 1) и название поля, например

$row = mysql_result($result, $i, "title");

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

Отсоединение от базы данных. Для закрытия непостоянного соединения применяется функция:

mysql_close(database_connect±on);

Однако в этом нет особой необходимости, поскольку с завершением выполнения сценария соединение закроется автоматически.

Внесение новой информации в базу данных. Внесение новой информации очень похоже на получение существующей. Нужно пройти те же шаги — установить соединение, отправить запрос и проверить результаты. Только в данном случае вместо SELECT будет использоваться INSERT. Хоть все и просто, но взглянуть на пример никогда не помешает.

<html>

<body>

<h1>Магазин "КНИГИ" - Форма ввода новой книги</h1>

<form action="insert_book.php" method="post"> <br>

Автор <input type="text" name="author" size="30"> <br>

Название <input type="text" name="title" size="30"> <br>

Цена <input type="text" name="price" size="7"> <br>

<input type="submit" value="Зарегистрировать">

</form>

</body>

</html>

Результаты заполнения этой формы передаются в insert_book.php, а сценарий выполняет определенную аутентификацию и пытается записать данные в базу данных. Код для сценария представлен в листинге ниже.

<html>

<body>

<h1>Магазин "КНИГИ" - Результаты ввода новой книги</h1>

<?php

// создание коротких имен переменных

$author=$_POST['author'];

$title=$_POST['title'];

$price=$_POST['price'];

if (!$author ||!$title ||!$price)

{

echo 'Вы ввели не все данные.<br>';

exit;

}

@ $db = mysql_pconnect('localhost', 'root', '');

if (!$db)

{

echo 'Ошибка в соединении с БД.';

exit;

}

mysql_select_db('shop');

$query = "insert into book values(NULL,'".$author."', '".$title."', ".$price.")";

// echo $query;

echo '<br>';

$result = mysql_query($query);

echo 'result'."$result";

if ($result)

echo mysql_affected_rows().' книг(а, и) добавлено в базу данных.';

?>

</body>

</html>

После изучения кода insert_book.php станет ясно, что он во многом похож на код сценария для извлечения данных из базы. Мы проверяем, чтобы все поля формы были заполнены) перед внесением данных в базу.

Мы снова соединяемся с базой данных, используя mysql_pconnect(), и настраиваем запрос. В данном случае это INSERT.

$query = "insert into book values (NULL,'".$author."', '".$title."', ".$price.")";

$result = mysql_query($query);

Одно существенное различие между INSERT и SELECT заключается в использовании mysql_affected_rows():

echo mysql_affected_rows().' книг(а, и) добавлено в базу данных.';

В предыдущем сценарии функция mysql_num_rows() применялась для определения количества строк, которые будет возвращать SELECT. При написании запросов, которые изменяют базу данных, например, INSERT, DELETE, UPDATE, следует использовать mysql_affected_rows().

Ниже приведен РНР – сценарий для определения всех записей имеющихся в таблице book.

<html>

<body>

<h1>Магазин "КНИГИ" - Результаты поиска</h1>

<?php

@ $db = mysql_pconnect('localhost', 'root', '');

if (!$db)

{

echo 'Ошибкат соединения с базой данных';

exit;

}

mysql_select_db('shop');

$query = "select * from book";

$result = mysql_query($query);

$num_results = mysql_num_rows($result);

echo '<p>Найдено книг: '.$num_results.'</p>';

for ($i=0; $i <$num_results; $i++)

{

$row = mysql_fetch_array($result);

echo '<p><strong>'.($i+1).'. Название: ';

echo stripslashes($row['title']);

echo '</strong><br />Автор: ';

echo stripslashes($row['author']);

echo '<br />Цена: ';

echo $row['price'];

echo '</p>';

}

?>

</body>

</html>

Результат работы РНР – сценария приведен далее.

Ниже приведена HTML-форма для удаления записей из таблицы book.

<html>

<body>

<h1>Магазин "КНИГИ" - Удаление</h1>

<form action="delete.php" method="post">

Укажите номер книги:<br>

<input name="del_term" type="text">

<br>

<input type="submit" value="Удалить">

</form>

</body>

</html>

Далее приведен возможный РНР – сценарий delete.php для удаления записей из таблицы book.

<html>

<body>

<h1>Магазин "КНИГИ" - Удаление</h1>

<?php

// создание коротких имен переменных

$searchterm=$HTTP_POST_VARS['del_term'];

$searchterm= trim($searchterm);

if (!$searchterm)

{

echo 'Вы не ввели параметры удаления.!!!';

echo '<p>'.$searchterm.'</p>';

exit;

}

@ $db = mysql_pconnect('localhost', 'root', '');

if (!$db) {

echo 'Ошибкат соединения с базой данных';

exit;

}

mysql_select_db('shop');

$query = "delete from book where"." id=$searchterm";

echo $query;

$result = mysql_query($query);

?>

</body>

</html>

Освобождение ресурсов. Если во время выполнения сценария возникают проблемы, связанные с нехваткой памяти, пригодиться функция mysql_free_result(). Вот ее прототип:

int mysql_free_result(int result);

Она вызывается с идентификатором результата:

mysql_free_result($result);

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: