Кроме использования функций ODBC с оператором SQL INSERT для добавления записей в базу данных, можно также извлекать записи из таблицы базы данных с помощью оператора SQL SELECT. Типичная форма ввода для выбора существующих записей из таблицы Directory показана ниже. В этом примере фиктивная компания Company XYZ, имеет онлайновую форму, которая позволяет пользователям ввести фамилию сотрудника и найти имя и фамилию сотрудника, номер телефона и адрес e-mail.
Оператор SQL SELECT показан ниже:
SELECT * | [DISTINCT] field1 [,field2]... FROM TableName WHERE criteria ORDER BY FieldName1 [ASC|DESC] [,FieldName2 [ASC|DESC] ]...
Более подробное рассмотрение оператора SELECT дано в разделе 10.
Следующий код используется для обработки формы DirectorySearch.php:
DirectorySearch.php <?php if ($_POST[submit] == "Search") { //Извлечение данных формы $string = $_POST['SearchName']; //Установление соединения с данными $conn = odbc_connect('Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\path\to\database.mdb','',''); //Выполнение оператора SQL SELECT $sql = "SELECT * FROM Directory WHERE LName = '$string'"; $rs = odbc_exec($conn, $sql); } ?> <!DOCTYPE html PUBLIC "-//W3C/DTD/XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><title>Страница Web</title> <style> body {margin:15px;font:10pt Verdana} td {vertical-align:top;border:solid 1px gray} input,textarea{border:0px} </style> </head> <body> <form action="DirectorySearch.php" method="post"> <p> Введите ниже фамилию и щелкните на кнопке "Search", чтобы найти номер телефона сотрудника и адрес e-mail </p> <table> <tr> <td colspan="2">Company XYZ Directory</td> </tr> <tr> <td><input type="text" size="15" name="SearchName"/></td> <td><input type="submit" value="Search" name="submit"/> </tr> </table> </form> <div> <?php if(!empty($_POST)) { while($row = odbc_fetch_array($rs)) { echo "Name: " .$row['FName'] . " "; echo $row['LName'] . "<br/>"; echo "Telephone: " . $row['Telephone'] . "<br/>"; echo "Email: " . $row['Email'] . "<br/>"; } odbc_close($conn); } ?> </div> </body> </html>
Пример 9.3.
Эта страница содержит два блока кода PHP. Первый выполняется, когда делается щелчок на кнопке отправки "Search". Введенное пользователем имя ( first name ) присваивается скалярной переменной '$string'. Затем с базой данных устанавливается соединение и выполняется оператор SQL SELECT для выбора всех (*) полей записей таблицы, где значение поля 'lastname' совпадает со строкой фамилии, введенной пользователем. Наконец, выполняется оператор SQL. Если найдены подходящие записи, то множество записей присваивается переменной '$rs'.
Второй блок кода появляется в разделе тела XHTML-документа. Код, содержащий операторы echo или print, помещается обычно между открывающим и закрывающим тегами <body>, чтобы он выводился или форматировался в соответствии с другими элементами страницы. Операторы echo и print в блоках PHP, появляющиеся выше <html>, всегда появляются в верху страницы и предшествуют всем другим ее элементам.
Назначение этого блока кода состоит в выводе записей, извлеченных при выполнении оператора SQL в предыдущем блоке кода. Сначала оператор if используется для определения, что массив $_POST не является пустым. Если массив пустой, то это означает, что форма не была отправлена и никакие записи не были извлечены. Если этот условный оператор будет отсутствовать, то возникнет ошибка, так как массив odbc_fetch_array не будет содержать никаких значений.
Затем используется цикл while для итераций на множестве записей. Во время каждой итерации по множеству записей, функция odbc_fetch_array() создает ассоциативный массив (здесь массив называется $row ), содержащий значения полей текущей записи. Индексы массива соответствуют именам полей формы, а элементы массива — значениям полей. Каждая запись затем выводит $row['FName'] — значение поля 'FirstName', $row['LName'] – значение поля 'LastName', $row['Telephone'] – значение поля 'Telephone', и $row['Email'] – значение поля 'Email'. Этот процесс продолжается, при этом каждый раз массив $row содержит новые значения, пока не будет достигнут конец множества записей.
После вывода всех записей соединение с базой данных закрывается с помощью функции odbc_close().
Ниже показан пример вывода, созданного после поиска в каталоге компании XYZ.
Если пользователь ищет фамилию, которая не существует в таблице базы данных, то никакие записи не выводятся. Чтобы избежать путаницы, приведенный выше сценарий можно немного изменить, выводя сообщение, если не будет найдено подходящих записей.
Модифицированный сценарий, показанный выше, добавляет счетчик записей $results для подсчета числа выводимых записей. В начале значение счетчика задается равным 0. Если множество записей существует, то цикл while будет выполнять итерации на каждой записи и увеличивать значение счетчика на 1. После окончания цикла проверяется значение счетчика. Если это значение равно 0, то никаких записей не было найдено, и выводится сообщение "Ничего не найдено!"