|
|
|
| Вопрос к старожилам я совсем запутался, выбирая данные из таблиц при ренении одинаковых задач не всегда работают одни и те же функции и запросы.
Очень хочу разобраться когда выполнять те или иные запросы и функции, подскажите, желательно на простых примерах.
а задачи в общем такие:
1. посчитать сколько строк в таблице
2. выбрать один столбец и одну строку столбца и опубликовать ее
3. выбрать несколько столбцов и несколько строк и опубликовать их
4. выбрать несколько столбцов в одной строке столбца и опубликовать их
5. выбрать один столбец и несколько строк и опубликовать их
очень хочется разобраться в этом | |
|
|
|
|
|
|
|
для: Bvz
(11.11.2008 в 15:22)
| | Самый простой способ сочинить простенький запрос, это произвести нужное действие в phpMyAdmyn и скопировать запрос от туда. Подробности PHP функций для работы с БД можно найти здесь
Для начала вот:
<?php
$db = mysql_connect("localhost","test","test")or die ('Безобразие 1:' . mysql_error());
mysql_select_db("test",$db)or die ('Безобразие 2:' . mysql_error());
@mysql_query("SET NAMES 'utf8'");
$query = mysql_query("SELECT COUNT(*) AS num FROM `test` ")or die ('Безобразие 3:' . mysql_error());
echo "Количество столбцов в таблице:".mysql_result($query,0,'num')."<br>";
$query = mysql_query("SELECT * FROM `test` LIMIT 1")or die ('Безобразие 4:' . mysql_error());
for($i=0; $i < mysql_num_fields($query); $i++)
$str[] = mysql_result($query,0,$i);
echo "Выборка всех полей 1 строки:<br>".implode(" | ",$str)."<br>";
$query = mysql_query("SELECT `".mysql_field_name($query, 0)."`FROM `test` ")or die ('Безобразие 5:' . mysql_error());
for($i=0; $i < mysql_num_rows($query); $i++)
$slb[] = mysql_result($query,$i,0);
echo "Выборка 1-х полей 1-го солбца:<br>".implode("<br>",$slb)."";
?>
|
и так далее...
CREATE TABLE `test` (
`pole1` varchar(100) default NULL,
`pole2` varchar(100) default NULL,
`pole3` varchar(100) default NULL,
`pole4` varchar(100) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `test`
--
INSERT INTO `test` VALUES ('Поле1 столбец1', 'Поле2 столбец1', 'Поле3 столбец1', 'Поле4 столбец1');
INSERT INTO `test` VALUES ('Поле1 столбец2', 'Поле2 столбец2', 'Поле3 столбец2', 'Поле4 столбец2');
INSERT INTO `test` VALUES ('Поле1 столбец3', 'Поле2 столбец3', 'Поле3 столбец3', 'Поле4 столбец3');
INSERT INTO `test` VALUES ('Поле1 столбец4', 'Поле2 столбец4', 'Поле3 столбец4', 'Поле4 столбец4');
|
| |
|
|
|
|
|
|
|
для: Николай2357
(11.11.2008 в 17:16)
| | 1. Применение mysql_result() в ситуациях 3,4,5 (т.е. при выборке любого результата, отличного от одного единственного значения) представляется мне а) неоптимальным и б) недостаточно прозрачным (плохо читаемым).
Т.е. для них имеет смысл использовать
$row = mysql_fetch_assoc($res) ;
2. Функция mysql_query() принимает запрос, а возвращает результат, вернее его дескриптор.
Писать $query = mysql_query() - свинство еще то.
Кто-то скажет, ерунда, косметика это. Но эта ерунда мешает видеть смысл.
3. Опубликовать результат, в общем случае, подразумевает применение htmlspecialchars()
PS. Это не отменяет полезности ответа в целом. Я вот не добрался.... | |
|
|
|
|
|
|
|
для: Trianon
(11.11.2008 в 17:34)
| | Ну вот, я опять извлекаю пользу из чужих постов. Снизу вверх:
>Опубликовать результат, в общем случае, подразумевает применение htmlspecialchars()
хотелось начать оправдания типа: это же для примера и т.п. Не буду, Вы правы, надо внимательней.
>Писать $query = mysql_query() - свинство еще то.
Упс... А как же тогда? Я вообще других вариантов не видел...
>Т.е. для них имеет смысл использовать
>$row = mysql_fetch_assoc($res) ;
и тут матушка лень подвела. Как говорится, тупо скопировал предыдущий. | |
|
|
|
|
|
|
|
для: Николай2357
(11.11.2008 в 18:30)
| | >Писать $query = mysql_query() - свинство еще то.
дошло... учту, раз свинство... :))) | |
|
|
|
|
|
|
|
для: Николай2357
(11.11.2008 в 18:39)
| | спасибо! буду разбираться
а для чего в
@mysql_query("SET NAMES 'utf8'");
|
добавляется @ | |
|
|
|
|
|
|
|
для: Bvz
(16.11.2008 в 20:32)
| | подавление вывода ошибок | |
|
|
|
|
|
|
|
для: ddhvvn
(16.11.2008 в 20:39)
| | это я знаю, я очень часто замечаю в запросах в этих функциях их добавляют, почему? | |
|
|
|
|
|
|
|
для: Bvz
(16.11.2008 в 20:46)
| | Если не будет связи с сервером базы данных или ещё по каким-то причинам не сможет выполнить запрос - функция выведет в окно браузера предупреждение на английском языке, что может нарушать дизайн и создавать впечатление непрофессионализма. Если вы подавляете вывод таких предупреждений, вы имеете возможность вывести свой текст в рамках вашего дизайна. | |
|
|
|
|
|
|
|
для: cheops
(17.11.2008 в 11:27)
| | а почему только в первом примере используется @ | |
|
|
|
|
|
|
|
для: Bvz
(17.11.2008 в 12:35)
| | Дальше ошибки обрабатываются, дело ещё в том, что SET NAMES появился недавно и в тех версиях MySQL где он не поддерживается - его ошибочное выполнение нужно просто игнорировать, поэтому зачастую и ставят @ перед этим запросом. | |
|
|
|
|
|
|
|
для: cheops
(17.11.2008 в 11:27)
| | а что делает?
@mysql_query("SET NAMES 'utf8'");
|
| |
|
|
|
|
|
|
|
для: Bvz
(17.11.2008 в 13:27)
| | Он сообщает, что вы собираетесь общаться с MySQL-сервером в кодировке utf8, поэтому даже если таблицы имеют другую кодировку, например, cp1251, сервер вам будет возвращаться данные в utf8, а ваши данные перед помещением в таблицу перекодировать из utf8. Если не сообщать кодировку, то сервер будет считать, что вы собираетесь общаться с ним в кодировке latin1 (для русского текста это никак не подходит). | |
|
|
|
|
|
|
|
для: cheops
(17.11.2008 в 13:41)
| | а вообще оно надо? )) | |
|
|
|
|
|
|
|
для: Bvz
(17.11.2008 в 13:48)
| | Если собираетесь с русским текстом работать - обязательно. Если только с английским - не обязательно. | |
|
|
|
|
|
|
|
для: cheops
(17.11.2008 в 13:52)
| | а почему тогда utf8? | |
|
|
|
|
|
|
|
для: Bvz
(17.11.2008 в 14:04)
| | Да собственно не обязательно utf8, можете cp1251 выбрать (очень популярная кодировка) или koi8-r или даже cp866 (последняя впрочем не характерна для Интернет). Главное, чтобы кодировка поддерживала русский язык. | |
|
|
|
|
|
|
|
для: Николай2357
(11.11.2008 в 17:16)
| | ясно по порядку, первая часть кода
<?php
$db = mysql_connect("localhost","test","test")or die ('Безобразие 1:' . mysql_error());
mysql_select_db("test",$db)or die ('Безобразие 2:' . mysql_error());
@mysql_query("SET NAMES 'utf8'");
|
mysql_connect - соединяет с сервером при неудаче выдает номер ошибки
mysql_select_db - выбирает БД при неудаче выдает номер ошибки
@mysql_query("SET NAMES 'utf8'"); сообщает серверу в какой кодировке будет работать,
т.е. все будет выглядеть примерно так:
<?php
$id_con = mysql_connect("localhost","root","")or die ('Невозможно соединиться с сервером:' . mysql_error());
mysql_select_db("sb",$id_con )or die ('Невозможно выбрать базу данных:' . mysql_error());
@mysql_query("SET NAMES 'cp1251'");
|
я правильно понял или что-то еще можно улучшить и я пойду далее )) | |
|
|
|
|
|
|
|
для: Bvz
(17.11.2008 в 14:29)
| | Ой, прошу прощения, давно не заглядывал, а тут дискуссия...
Я сам не слишком силен в этих вопросах, от того и интерес.
Мне кажется, что
<?
or die ('Невозможно соединиться с сервером:' . mysql_error());
mysq
|
лучше выводить в логи, а не на экран, от того у меня и "безобразие", чтоб не забыть. А вот тут
<?
("localhost","root","");
| Нужно всё таки парль поставить. Иначе с такими настройками беды не избежать.... | |
|
|
|
|
|
|
|
для: Николай2357
(22.11.2008 в 05:09)
| | ну про пароль понятно, это для локалки привер, а как в логи выводить?
и еще что такое num и что с ним потом можно делать? | |
|
|
|
|
|
|
|
для: Bvz
(22.11.2008 в 10:02)
| | Что бы ошибки вывести в лог, нужно в .htaccess написать примерно так:
php_flag display_startup_errors Off
php_flag display_errors Off
php_flag log_errors On
php_value error_log log/error.log
| ну и сам файл должен быть. error.log
А num это псевдоним. Можно по другому назвать. Это для того, что бы вывести значение. | |
|
|
|
|
|
|
|
для: Николай2357
(23.11.2008 в 11:56)
| | я имею ввиду в дальнейшем коде им можно как-то пользоваться? псевдонимом | |
|
|
|