Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Веб программирование.Начало пути.doc
Скачиваний:
7
Добавлен:
01.04.2025
Размер:
8 Мб
Скачать
☆

Выборка данных из таблиц бд

Создать соединение с MySQL.

int mysql_connect(string hostname, string username, string password);

Выбрать базу данных для работы.

int mysql_select_db(string database_name, int link_identifier);

SQL запрос к базе данных на выборку данных.

int mysql_query(string query, int link_identifier);

Функция возвращает ID результата или 0, если произошла ошибка.

Закрытие соединения с MySQL.

int mysql_close(int link_identifier);

Выборка данных из базы производится SQL командой SELECT.

В PHP имеются ряд функций, позволяющих сохранять и обрабатывать данные, на которые указывает дескриптор result $result=mysql_query(“SELECT …”);

int mysql_result(int result, int i, column);

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

int mysql_num_rows(int result);

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

mysql_fetch_row($result))

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

mysql_fetch_array(result)

Возвращает результаты запроса в виде ассоциированного массива

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

$strike= mysql_result($result,0,"first");

printf("First Name: %s<br>\n",$str);

$strike= mysql_result($result,0,"last");

printf("Last Name: %s<br>\n",$str);

$strike= mysql_result($result,0,"address");

printf("Address: %s<br>\n",$str);

$strike= mysql_result($result,0,"position");

printf("Position: %s<br>\n",$str);

mysql_close($db);

?>

Функция mysql_connect() открывает связь с сервером баз данных MySQL. В результате выполнения этой функции получаем значение идентификатора соединения, которое присваиваем переменной $db. C помощью функции mysql_select_db() выбираем базу данных. В качестве параметров передаем название нужной нам базы данных и идентификатор соединения, полученный нами при выполнении предыдущей команды.

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

С помощью функции mysql_result() извлекаем из переменной $result, первую запись (порядковый номер 0), и значение определенного поля (по его имени). Перебирая друг за другом записи, выберем все записи, что хранятся в базе данных.

Рассмотрим более современные, чем mysql_result(), функции выборки данных mysql_fetch_row() и mysql_fetch_array(). Выведем все записи, хранящиеся в базе. Обратимся к базе данных со следующим кодом:

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

echo "<table border=1>\n";

echo "<tr><td>Name</td><td>Position</tr>\n";

while ($myrow = mysql_fetch_row($result))

{

printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myrow[1], $myrow[2], $myrow[3]);

}

echo "</table>\n";

?>

</body>

</html>

Цикл while() говорит, что пока в переменной $result остается запись для выборки, ее необходимо извлечь с помощью функции mysql_fetch_row и присвоить переменной $myrow. А после этого выполнить код, что расположен внутри фигурных скобок "{}". Функции mysql_fetch_row в качестве параметра подается массив $result. Функция выбирает из него строку, которую мы можем записать в переменную $myrow и автоматически переходит на следующую строку. Вызвав снова mysql_fetch_row, мы выберем следующую строку из массива, и так далее до тех пор, пока не достигнем конца массива. В этом случае mysql_fetch_row вернет значение false, которое послужит сигналом, что все записи выбраны и можно завершить цикл.

Теперь наша задача как-то вывести в теле цикла полученную запись. Выбранный ряд хранится в переменной $myrow. Она также, как и $result, является массивом, только одномерным. Главное не забывайте, что элементы массивов нумеруются от 0, а не от 1, так как здесь мы имеем дело с компьютерной, а не человеческой логикой. Наш код грешит одним недостатком: если в базе данных не будут найдены записи, удовлетворяющие нашему запросу, мы не получим никакого сообщения об этом. Неплохо было бы, чтобы программа выдавала какое-нибудь сообщение. Сделаем ее более дружественной. Взгляните на следующий код:

Пример: Соединение с БД и выборка записей

<?// php428bd.php - скрипт создает БД и таблицу

$dbName ="mydb";

/* создать соединение */

$link = mysql_connect("localhost", "valera", "12345")

or exit("Could not connect");

mysql_select_db("$dbName",$link) or die("Не могу выбрать базу данных ");

//создать SQL - запрос

$sqlq="Select * from students";

//

$result = mysql_query($sqlq,$link) or die ("Invalid query");

$myrow=mysql_fetch_array($result); //установка первой записи

echo $myrow["name"];//вывод поля “name” первой записи

do//цикл просмотра всех записей

{

echo “сотрудник-”, $myrow[‘id’];

echo $myrow["name"];

}

while($myrow=mysql_fetch_array($result));

MYSQL_CLOSE();/* Закрыть соединение */

?>

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

if ($myrow = mysql_fetch_array($result))

{

echo "<table border=1>\n";

echo "<tr><td>Name</td><td>Position</td></tr>\n";

do

{

printf("<tr><td>%s %s</td><td>%s</tr>\n", $myrow["first"], $myrow["last"],

$myrow["address"]);

}

while ($myrow = mysql_fetch_array($result));

echo "</table>\n";

}

else

{

echo "Sorry, no records were found!";

}

?>

</body>

</html>

В данном коде вместо функции mysql_fetch_row() мы использовали функцию mysql_fetch_array(). С помощью этой функции мы можем обращаться к каждому полю массива не по номеру, а по имени. Например, если раньше для получения имени нам приходилось писать $myrow[1], то теперь мы можем писать $myrow["first"] ("first" – название столбца в базе данных и в массиве). Кроме этого, в коде использован цикл do/while и условная конструкция if-else. Выражение if-else говорит, что если мы можем присвоить значение $myrow, то надо начать выборку, в противном случае записей нет, переходим к блоку else и выводим соответствующее сообщение.

Рассмотрим параметры запроса. Существует три способа передачи параметров запроса. Первый, использовать метод GET в форме. Второй – набрать параметры прямо в адресной строке браузера. И третий, это вставить параметры в обычную ссылку на странице. То есть сделать ссылку примерно такого вида

<a href="http://my_machine/mypage.php3?id=1">

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

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

$result = mysql_query("SELECT * FROM employees",$db);

if ($myrow = mysql_fetch_array($result))

{

do

{

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],$myrow["first"], $myrow["last"]);

}

while ($myrow = mysql_fetch_array($result));

}

else

{

echo "Sorry, no records were found!";

}

?>

</body>

</html>

Рассмотрим функцию printf() поближе. Во-первых, обратите внимание на обратные косые черты. Они говорят PHP-движку, что необходимо вывести символ, следующий за чертой, а не рассматривать его, как служебный символ или как часть кода. В данном случае это касается кавычки, которая нам нужна в тексте ссылки, но для PHP является символом окончания текстовой строки.

Далее, в коде используется интересная переменная $PHP_SELF. В этой переменной всегда хранится имя и URL текущей страницы. В данном случае эта переменная важна для нас потому, что мы хотим через ссылку вызвать страницу из нее самой. То есть вместо того, чтобы делать две страницы, содержащие разные коды для разных действий, мы все действия запихнули в одну страницу. С помощью условий if-else мы будем переводить стрелки с одного кода на другой, гоняя одну и ту же страницу по кругу. Это конечно увеличит размер страницы и время, необходимое на ее обработку, но в некоторых случая, такой трюк очень удобен. Переменная $PHP_SELF гарантирует нам, что наша страница будет работать даже в том случае, если мы перенесем ее в другой каталог или даже на другую машину. Как мы уже сказали, ссылки, сгенерированные в цикле ссылаются на ту же самую страницу, только к имени самой страницы на лету добавлена некоторая информация: переменные и их значения. Переменные, которые передаются в строке-ссылке, автоматически создаются PHP-движком, и к ним можно обращаться так, как если бы вы их создавали в коде сами. При втором проходе страницы наша программа отреагирует на эти пары name=value и направит ход исполнения на другие рельсы. В данном случае мы проверим, есть ли переменная $id, и в зависимости от результата выполним тот или иной код. Вот как это будет выглядеть:

<html>

<body>

<?php

$db = mysql_connect("localhost", "root");

mysql_select_db("mydb",$db);

// display individual record

if ($id)

{

$result = mysql_query("SELECT * FROM employees WHERE id=$id",$db);

$myrow = mysql_fetch_array($result);

printf("First name: %s\n<br>", $myrow["first"]);

printf("Last name: %s\n<br>", $myrow["last"]);

printf("Address: %s\n<br>", $myrow["address"]);

printf("Position: %s\n<br>", $myrow["position"]);

}

else

{

// show employee list

$result = mysql_query("SELECT * FROM employees",$db);

if ($myrow = mysql_fetch_array($result))

{

// display list if there are records to display

do

{

printf("<a href=\"%s?id=%s\">%s %s</a><br>\n", $PHP_SELF, $myrow["id"],

$myrow["first"], $myrow["last"]);

}

while ($myrow = mysql_fetch_array($result));

}

else

{

// no records to display

echo "Sorry, no records were found!";

}

}

?>

</body>

</html>