![]() |
|
||||||||||||||
|
|
|
<?php
$sql = 'SELECT id, user_ip, user_agent FROM user_tracker';
$qry = mysql_query($sql, $dblink);
if(!$qry)
{
echo 'Ошибка выполнения запроса: ' . mysql_error();
exit();
}
// обрабатываем результаты запроса
?>
Функция mysql_query() позвращает ссылку на результаты выполнения запроса. Если запрос завершился с ошибкой - функция вернёт false, после чего текст ошибки можно будет получить вызовом функции mysql_error(), а номер ошибки - функцией mysql_errno(). Для получения отдельной записи из результатов запроса необходимо воспользоваться одной из fetch-функций (функции получения данных). Их несколько и каждая удобна в своём случае.
Все fetch-функции работают по одному алгоритму. При первом вызове функция проверяет наличие строк и если результат запроса не пустой - возвращает первую строку и переводит указатель текщей строки на следующую запись. При каждом последующем вызове функция возвращает пользователю текущую строку и переходит к следующей. Если достигнута последняя строка и передавать больше нечего - функция возвращает false. Таким образом, цикл перебора всех записей будет выгядеть так:
<?php
...
// получаем первую строку
$row = mysql_fetch_object($qry);
while ($row)
{
// обрабатываем полученные данные
echo "IP-адрес пользователя: " . $row->user_ip;
echo "Используемый браузер: " . $row->user_agent;
// получаем следующую строку
$row = mysql_fetch_object($qry);
}
...
?>
Иногда возникает необходимость передвигаться по записям не только "вперёд", но и "назад", т.е. по направлению от текущей строки к первой. В этом случае надо использовать функцию mysql_data_seek(), которая позволяет перейти к записи с заданным номером. <?php ... // $x - требуемый номер строки $x = 100; if(mysql_data_seek($qry, $x)) echo 'успешно перешли к строке №' . $x; else echo 'перейти к строке №' . $x . ' не удалось'; ... ?> Значение номера строки должно быть в диапазоне от 0 до количества строк в результатах запроса. Количество строк можно узнать при помощи функции mysql_num_rows (). С учётом этого, можно переписать предыдущий пример в более безопасной форме: <?php ... // $x - требуемый номер строки $x = 100; if($x < mysql_num_rows($qry)) mysql_data_seek($qry, $x); else echo "перейти к строке №" . $x . " не удалось." . "Строка с таким номером не существует."; ... ?> Однако mysql_num_rows() применима только к результатам выполнения SELECT. При выполнении всех остальных команд (INSERT, UPDATE и DELETE) функция возвращает 0 (ведь сервер не возвращал ни одной строки). Чтобы определить, сколько строк было вставлено, изменени или удалено при выполнении последнего запроса необходимо воспользоваться функцией mysql_affected_rows(). Например, следующий код помогает узнать результаты очистки таблицы: <?php $sql = "DELETE FROM user_tracker"; $qry = mysql_query($sql, $dblink); if($qry) echo 'Удалено ' . mysql_affected_rows() . ' строк.'; else 'Ошибка удаления: ' . mysql_error(); ?> Если вам необходимо узнать значение автоинкрементного поля для только что вставленной записи - воспользуйтесь функцией mysql_insert_id().
<?php
$sql = "INSERT user_tracker (session_id, enter_dt, 'user_ip') ".
"VALUES('ahduyfis', NOW(), '192.168.10.33')";
$qry = mysql_query($sql, $dblink);
if($qry)
{
echo 'Добавлена запись с id = ' . mysql_insert_id($dblink);
}
else 'Ошибка добавления: ' . mysql_error();
?>
Как уже говорилось ранее - все текстовые значения в запросах записываются в одинарных кавычках. Но очень часто возникает ситуация, когда необходимо занести строку, в которой уже есть кавычки (например, пароль вида "my'1super'2password"). Если попробовать внести её в исходном виде, то MySQL не сможет обработать запрос и выдаст соответствующую ошибку. Чтобы этого избежать необходимо предварительно подготовить строку к занесению. Для этого применяется функция mysql_real_escape_string(). Она преобразует все служебные и нечитаемые символы в соответствующие им спецсимволы, такие как \x00, \n, \r и т.п. Обязательная проверка всех данных перед занесением в таблицу не только является признаком "хорошего тона" среди программистов, но и является насущной необходимостью для защиты сайта от взлома и хищения данных.
<?php
$session_id = mysql_real_escape_string('ahduyfis');
$user_ip = mysql_real_escape_string('192.168.10.33');
$sql = "INSERT user_tracker (session_id, enter_dt, 'user_ip') ".
"VALUES($session_id, NOW(), $user_ip)";
...
?>
При написании сложных запросов лучше всего предварительно запрос испытать при помощи сторонних программ, а только потом добавлять его в код. Такой подход существенно облегчает тестирование как запроса, так и скрипта в целом.
|
|
|||||||||||||||||||||||||||||||||||||||||
|
Спасибо, что заглянули на сайт. Надеюсь, Вам понравилось. Заходите еще. Здесь всегда рады вам :) |
|
© 2005-2012 |
E-mail: |