Конкурс:Наши детки
Случайные изображения
|
Функции Php Для Работы С Mysql
|
|
|
|
22.8.2009, 13:28
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Функции PHP для работы с MySQLРассмотрим основные функции PHP, применяемые для работы с MySQL сервером. Функции соединения с сервером MySQLОсновной функцией для соединения с сервером MySQL является mysql_connect(), которая подключает скрипт к серверу баз данных MySQL и выполяет авторизацию пользователя базой данных. Синтаксис у данной функции такой: Код mysql_connect ([string $hostname] [, string $user] [, sting $password]); Как вы наверно заметили, все параметры данной функции являются необязательными, поскольку значения по умолчанию можно прописать в конфигурационном файле php.ini. Если вы хотите указать другие имя MySQL-хоста, пользователя и пароль, вы всегда можете это сделать. Параметр $hostname может быть указан в виде: хост:порт. Функция возвращает идентификатор (типа int) соединения, вся дальнейщая работа осуществляется только через этот идентификатор. При следующем вызове функции mysql_connect() с теми же параметрами новое соединение не будет открыто, а функция возвратит идентификатор существующего соединения. Для закрытия соединения предназначена функция mysql_close(int $connection_id). Вообще, соединение можно и не закрывать - оно будет закрыто автоматически при завершении работы PHP скрипта. Если вы используете более одного соединения, при вызове mysql_close() нужно указать идентификатор соединения, которое вы хотите закрыть. Вообще не закрывать соединения - плохой стиль, лучше закрывать соединения с MySQL самостоятельно, а не надеясь на автоматизм PHP, хотя это ваше право. Если вы будете использовать только одно соединение с базой данных MySQL за все время работы сценария, можно не сохранять его идентификатор и не указывать идентификатор при вызове остальных функций. Функция mysql_connect() устанавливает обыкновенное соединение с MySQL. Однако, PHP поддерживает постоянные соединения - для этого используйте функцию mysql_pconnect(). Аргументы этой функции такие же, как и у mysql_connect(). В чем разница между постоянным соединением и обыкновенным соединением с MySQL? Постоянное соединение не закрывается после завершения работы скрипта, даже если скрипт вызвал функцию mysql_close(). Соединение привязывается к PID потомка веб сервера Apache (от имени которого он и работает) и закрывается лишь тогда, когда удаляется процесс-владелец (например, при завершении работы или перезагрузке веб-сервера Apache). PHP работает с постоянными соединениями примерно так: при вызове функции mysql_pconnect() PHP проверяет, было ли ранее установлено соединение. Если да, то возвращается его идентификатор, а если нет, то открывается новое соединение и возвращается идентификатор. Постоянные соединения позволяют значительно снизить нагрузку на сервер, а также повысить скорость работы PHP скриптов, использующих базы данных. При работе с постоянными соединениями нужно следить, чтобы максимальное число клиентов Apache не преывшало максимального числа клиентов MySQL, то есть параметр MaxClient (в конфигурационном файле Apache - httpd.conf) должен быть меньше или равен параметру max_user_connection (параметр MySQL).
|
|
|
|
|
|
Ответов
(1 - 11)
|
24.8.2009, 8:14
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Функция выбора базы данныхФункция mysql_select_db (string $db [, int $id]) выбирает базу данных, с которой будет работать PHP скрипт. Если открыто не более одного соединения, можно не указывать параметр $id. Код // Попытка установить соединение с MySQL: if (!mysql_connect($server, $user, $ password)) { echo "Ошибка подключения к серверу MySQL"; exit; } // Соединились, теперь выбираем базу данных: mysql_select_db($db);
|
|
|
|
|
24.8.2009, 8:15
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Функции выполнения запросов к серверу баз данныхВсе запросы к текущей базе данных отправляются функцией mysql_query(). Этой функции нужно передать один параметр - текст запроса. Текст запроса модет содержать пробельные символы и символы новой строки (\n). Текст должен быть составлен по правилам синтаксиса SQL. Пример запроса: Код $q = mysql_query("SELECT * FROM mytable"); Приведенный запрос должен вернуть содержимое таблицы mytable. Результат запроса присваивается переменной $q. Результат - это набор данных, который после выполнения запроса нужно обработать определенным образом.
|
|
|
|
|
24.8.2009, 8:16
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Функции обработки результатов запросаЕсли запрос, выполненный с помощью функции mysql_query() успешно выполнился, то в результате клиент получит набор записей, который может быть обработан следующими функциями PHP: * mysql_result() - получить необходимый элемент из набора записей; * mysql_fetch_array() - занести запись в массив; * mysql_fetch_row() - занести запись в массив; * mysql_fetch_assoc() - занести запись в ассоциативный массив; * mysql_fetch_object() - занести запись в объект. Также можно определить количество содержащихся записей и полей в результате запроса. Функция mysql_num_rows() позволяет узнать, сколько записей содержит результат запроса: Код $q = mysql_query("SELECT * FROM mytable"); echo "В таблице mytable ".mysql_num_rows($q)." записей"; Запись состоит из полей (колонок). С помощью функции mysql_num_fields() можно узнать, сколько полей содержит каждая запись результата: Код $q = mysql_query("SELECT * FROM mytable"); echo "В таблице mytable ".mysql_num_fields($q)." полей "; У нас также есть возможность узнать значение каждого поля. Это можно сделать с помощью следующей функции: mysql_result (int $result, int $row, mixed $field); Параметр функции $row задает номер записи, а параметр $field - имя или порядковый номер поля. Предположим, SQL-запрос вернул следующий набор данных: Email Name Last_Name ------------------------------------ ivanov@mail.ru Ivan Ivanov petrov@mail.ru Petr Petrov Вывести это в браузер можно следующим образом: Код $rows = mysql_num_rows($q); $fields = mysql_num_fields($q);
echo "<pre>"; for ($c=0; $c<$rows; $c++) { for ($cc=0; $cc<$fields; $cc++) { echo mysql_result($q, $c, $cc)."\t"; echo "\n"; } } echo "</pre>"; Следует отметить, что функция mysql_result() универсальна: зная количество записей и количество полей, можно "обойти" весь результат, но в тоже время, скорость работы данной функции достаточно низка. Поэтому, для обработки больших наборов записей рекомендуется использовать функции mysql_fecth_row(), mysql_fecth_array(), и.т.д. Функция mysql_fecth_row(int $res) получает сразу всю строку, соответствующую текущей записи результата $res. Каждый следующий вызов функции перемещает указатель запроса на следующую позицию (как при работе с файлами) и получает следующую запись. Если более нет записей, то функция возвращает FALSE. Пример использования данной функции: Код $q = mysql_query("SELECT * FROM mytable WHERE month=\"$db_m\" AND day=\"$db_d\"); for ($c=0; $c<mysql_num_rows($q); $c++) { $f = mysql_fetch_row($q); echo $f; } Использовать функцию mysql_fecth_row() не всегда удобно, так как значения всех полей одной записи находятся все в одной строке. Удобнее использовать функцию mysql_fetch_array(), которая возвращает ассоциативный массив, ключами которого будут имена полей. Функция mysql_fecth_array(int $res [, int $result_type]) возвращает не ассоциативный массив, а массив, заданный необязательным параметром $result_type, который может принимать следующие значения: * MYSQL_ASSOC - возвращает ассоциативный массив; * MYSQL_NUM -возвращает массив с числовыми индексами, как в функции mysql_fecth_row(); * MYSQL_BOTH - возвращает массив с двойными индексами, то есть вы можете работать с ним, как с ассоциативным массивом и как со списком (MYSQL_BOTH - это значение по умолчанию для параметра $result_type. В PHP есть функция, возвращающая ассоциативный массив с одним индексом: mysql_fetch_assoc(int $res); Фактически, данная функция является синонимом для mysql_fetch_array($res, MYSQL_ASSOC); Пример использования функции mysql_fecth_array(): Код $q = mysql_query("SELECT * FROM mytable WHERE month=\"$db_m\" AND day=\"$db_d\"); for ($c=0; $c<mysql_num_rows($q); $c++) { $f = mysql_fetch_array($q); echo "$f[email] $f[name] $f[month] $f[day] <br>"; } Как видно, использовать функцию mysql_fetch_array() намного удобнее, чем mysql_fetch_row().
|
|
|
|
|
24.8.2009, 8:17
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Функции получения информации о результатах SQL-запросов
PHP предоставляет еще несколько полезных функций, которые позволяют узнать информацию о результах SQL-запросов.
* Функция mysql_field_name(int $result, int $offset) возвращает имя поля, находящегося в результате $result с номером $offset (нумерация начинается с 0). Другими словами, функция возвращает имя поля с номером $offset. * Функция mysql_field_type(int $result, int $offset) возвращает тип поля с номером $offset в результате $result (номер задается относительно результата, а не таблицы); * Функция mysql_field_flags(int $result, int $offset) возвращает пречисленные через пробел флаги (модификаторы), которые имеются у поля с номером $offset. Перечислим все поддерживаемые MySQL флаги:
Флаг Описание not_Null Поле не может содержать неопределенного значения (NULL), то есть поле должно быть явно инициализировано Primary_Key Поле будет первичным ключом - идентификатором записи, по которому можно однозначно идентифицировать запись; auto_increment При вставке новой записи значение этого поля будет автоматически увеличено на единицу, потому в таблице никогда не будет двух записей с одинаковым значением этого поля; Unique_Key Поле должно содержать уникальное значение; Multiple_Key Индекс Blob Поле может содержать бинарный блок данных Unsigned Поле содержит беззнаковые числа Zerofill Вместо пробелов используются символы с кодом \0 Binary Поле содержит двоичные данные enum Поле может содержать один элемент из нескольких возможных (элемент перечисления) timestamp В поле автоматически заносится текущая дата и время при его модификации
Функция mysql_field_flags() возвращает флаги в виде строки, в которой флаги разделяются пробелами.
|
|
|
|
|
24.8.2009, 8:17
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Практический пример использования функций PHP-MySQLСкрипт вывода содержимого таблицы MySQL в виде HTML: Код <?php $host = "localhost"; $user = "user"; $password = "secret_password";
// Производим попытку подключения к серверу MySQL: if (!mysql_connect($host, $user, $password)) { echo "<h2>MySQL Error!</h2>"; exit; }
// Выбираем базу данных: //mysql_select_db($db); mysql_select_db("test");
// Выводим заголовок таблицы: echo "<table border=\"1\" width=\"100%\" bgcolor=\"#FFFFE1\">"; echo "<tr><td>Email</td><td>Имя</td><td>Месяц</td>"; echo "<td>Число</td><td>Пол</td></tr>";
// SQL-запрос: // $q = mysql_query ("SELECT * FROM mytable"); $q = mysql_query ("SELECT * FROM clients");
// Выводим таблицу: for ($c=0; $c<mysql_num_rows($q); $c++) { echo "<tr>";
//// echo "<td>$f[email]</td><td>$f[name]</td><td>$f[month]</td>"; // echo "<td>$f[day]</td><td>$[s]</td>"; echo "<td>$f[C_NO]</td><td>$f[FIO]</td><td>$f[ADDR]</td>"; echo "<td>$f[CITY]</td><td>$f[PHONE]</td>";
echo "</tr>"; } echo "</table>"; ?>
|
|
|
|
|
27.8.2009, 9:26
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Пример: Скрипт вывода содержимого таблицы MySQL в виде HTML: отличие данного примера в том, что вывод осуществляется, после закрытия обращения к базе, такой вывод может быть крайне полезен, например при необходимости обращения к второй базе данных Код <? //proveryat' nado esli $POST['blah' ] != '' || !empty(POST )
// листинг загрузки файла на сервер /* $fpatch=$url."/".$filenewname; */ //Загружаем данные в БД
$user = "user"; $password = "password"; $database="database"; $dtable="dtable"; if ($db=@mysql_connect("localhost",$user,$password)){ mysql_select_db($database);
$forumId = htmlspecialchars($_GET["forumId"]); //echo $forumId; echo "<h1>".$forumId."</h1>"; $query = "SELECT * FROM $dtable WHERE showforum=$forumId";
// Perform Query $result = mysql_query($query);
// Check result // This shows the actual query sent to MySQL, and the error. Useful for debugging. if (!$result) { $message = 'Invalid query: ' . mysql_error() . "\n"; $message .= 'Whole query: ' . $query; die($message); }
// Use result // Attempting to print $result won't allow access to information in the resource // One of the mysql result functions must be used // See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc. $outputArray = array ();
while ($row = mysql_fetch_assoc($result)) { array_push($outputArray,array( 0 => $row['showtopic'], 1 => $row['showpost'], 2 => $row['showforum'] ));
}
mysql_close();
echo "шапка<br>"; for ($i=0;$i<count($outputArray);$i++){ echo ""; // echo "<p>". $outputArray[$i][2]."</p>"; номер echo "<b>". $outputArray[$i][0] ."</b>"; echo "<p>".$outputArray[$i][1] ."</p>"; echo "<hr>"; } echo "низ"; } ?>
|
|
|
|
|
27.8.2009, 9:31
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Пример записи одной строки в базу данных ( php mysql)Код <? //proveryat' nado esli $POST['blah' ] != '' || !empty(POST ) echo "<pre>";
print_r($_POST); echo "</pre>"; //echo $_POST["result"];
$user = "root"; $password = "1"; $database="test"; $dtable="clients";
if ($db=@mysql_connect("localhost",$user,$password)){ mysql_select_db($database);
echo "База данных найдена!<br>";
$inputData = split(";",$result);
$forumId = $inputData[0]; for ($i=1;$i<count($inputData);$i=$i+2) { $sql = "INSERT INTO $dtable(C_NO,FIO,ADDR,CITY,PHONE) VALUES('2','".$inputData[$i]."','".$inputData[$i+1]."','".$forumId."','empty')"; mysql_query($sql);} }
else{ echo "<p>База данных не найдена!</p>";} mysql_close(); ?>
|
|
|
|
|
31.8.2009, 9:44
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Обрезание вызываемых из базы данных( php mysql) Код $qqq = "SELECT left(post,$simv) as post_left FROM $dtable1 WHERE pid=$z"; $aaa = mysql_query ($qqq); $fff = mysql_fetch_array($aaa); $text = $fff[post_left];
|
|
|
|
|
31.8.2009, 9:48
|
Опытный Пользователь
Группа: Малёк
Сообщений: 241
Регистрация: 20.1.2009
Пользователь №: 14435
|
Определяет с какого домена идет запрос (php mysql) Код $SERVER = $_SERVER['HTTP_HOST'];
|
|
|
|
|
|
|
|