Картинка в MySQL
Как в базу MySQL записать картинку и потом вывести ее в PHP?
Как в базу записать картинку не знаю, но если читать статьи о mysql, то везде говориться, что в бд нужно хранить токо ссылку на изображение, иначе бд будет тормозить!
Как в базу записать картинку не знаю, но если читать статьи о mysql, то везде говориться, что в бд нужно хранить токо ссылку на изображение, иначе бд будет тормозить!
Если в папке будет несколько тысяч картинок, по идее, тормозить будет не меньше.Подскажите, как это все лучше реализовать
Если в папке будет несколько тысяч картинок, по идее, тормозить будет не меньше.Подскажите, как это все лучше реализовать
Тебе же уже я ответил, что лучше хранить изображения в файле1 Но бывают такие случаи, когда хостинг тарифицирует только, то что лежит на сервере, а бд не тарифицирует! Тогда конечнор лучше на сервере хранить например 10мб, а в бд 10гб ;) Но вообще бработа с большими данными не конек MySQL.
И вот тебе пример как хранить фотк например
// Имя файла
$filename = "image.jpg";
// Открываем файл
$fd = fopen($filename,"r");
// Читаем его содержимое в буфер
$bufer = fread($fd,filesize($filename));
// Закрываем файл
fclose($fd);
?>
а $bufer пиши в бд с помощью скрипта типа insert into... values... =)) Думаю разберешься!
Если в папке будет несколько тысяч картинок, по идее, тормозить будет не меньше.Подскажите, как это все лучше реализовать
тормозить от этого вообще не будет.
А в базе если они будут, тормозить будет.
Подумай сам почему.
тормозить от этого вообще не будет.
А в базе если они будут, тормозить будет.
Подумай сам почему.
аффтар! почитай, и не желай ерунды ;)
http://forum.sysadmins.ru/13/85762/
аффтар! почитай, и не желай ерунды ;)
http://forum.sysadmins.ru/13/85762/
Я сам уже задумался об этом...
Тормозить никогда не будет:D :D :D :D
Я сам уже задумался об этом...
Тормозить никогда не будет:D :D :D :D
в смысле? не понял твоего поста...
в смысле? не понял твоего поста...
А я твоего) Какой ерудны я желал?:) Я вообще ничего не желал) Я сказал, что эт чушь, что тормозить будет, если в каталоге будет тысячи файлов.
А я твоего) Какой ерудны я желал?:) Я вообще ничего не желал) Я сказал, что эт чушь, что тормозить будет, если в каталоге будет тысячи файлов.
мой пост был автору топика.
Например при добавлении новой фотки в фотоальбом
сделать так:
CREATE TABLE `album` (
`albm_id` int(10) unsigned NOT NULL auto_increment,
`photo_about` varchar(200) default NULL,
PRIMARY KEY (`albm_id`)
)
<form action="photo_do_add.php" method=post ENCTYPE="multipart/form-data">
Фото: <input type=file name="photo_file" size=37 value="">
Описание:<input type=text name="photo_about" size=50 maxlength=200 value="">
<input type=submit value="добавить фото">
</form>
//вставить запись в бд
$sql = "INSERT INTO album(albm_id,photo_about) VALUES ('','".$photo_about."')";
mysql_query($sql);
//если закачали рисунок
if(is_uploaded_file($photo_file))
{
//найдём id новой записи
$my_query = "SELECT MAX(albm_id) AS max_id FROM album";
$my_result=mysql_query($my_query);
$my_array=mysql_fetch_array($my_result);
$d_id=$my_array["max_id"];
copy($photo_file,"photos/".$d_id.".jpg");
}
Смущает как получить id тока что добавленной записи (я это делаю-SELECT MAX(albm_id), т.е. получаю max id -последний по значению). Но не может ли случиться так что несколько пользователей работают с таблицей и возникнет конфликт? Использовать LOCK_TABLES? Или мона узнать как-нить по хитрому однозначно значение id тока что добавленной записи?
Смущает как получить id тока что добавленной записи (я это делаю-SELECT MAX(albm_id), т.е. получаю max id -последний по значению). Но не может ли случиться так что несколько пользователей работают с таблицей и возникнет конфликт? Использовать LOCK_TABLES? Или мона узнать как-нить по хитрому однозначно значение id тока что добавленной записи?
Такого не случится. Навряд-ли два запроса пересекутся в течение трёх тысчных секунды. Ну а если и случится раз в тысячелетие, то стоит-ли об этом тосковать?
В этом случае предлагаю сначала определяться с id, забронировать его и дальше с ним работать. Правда, в этом случае придётся отказаться от автоинкремента.
Но не может ли случиться так что несколько пользователей работают с таблицей и возникнет конфликт? Использовать LOCK_TABLES? Или мона узнать как-нить по хитрому однозначно значение id тока что добавленной записи?
Учим транзакции, учим. Читаем мануалы, читаем. До просветления. Базы - они ведь для того и создавались дабы решить упомянутые проблемы.
LAST_INSERT_ID([expr]) - по поводу последнего вопроса.
Учим транзакции, учим. Читаем мануалы, читаем. До просветления. Базы - они ведь для того и создавались дабы решить упомянутые проблемы.
LAST_INSERT_ID([expr]) - по поводу последнего вопроса.
Всё было бы хорошо, если бы не было так плохо: у меня на всех базах (версии разные, стоят у разных хостёров) SELECT LAST_INSERT_ID(id) FROM table возвращает полностью столбец id, как если бы я написал просто SELECT id FROM table.
В чём тут беда - не знаю, хотя мануалы действительно обещают пресловутый LAST_INSERT_ID...
Всё было бы хорошо, если бы не было так плохо: у меня на всех базах (версии разные, стоят у разных хостёров) SELECT LAST_INSERT_ID(id) FROM table возвращает полностью столбец id, как если бы я написал просто SELECT id FROM table.
В чём тут беда - не знаю, хотя мануалы действительно обещают пресловутый LAST_INSERT_ID...
Вообщето её без параметра надо вызывать. Параметр - если надо установить точку отсчета.
Вообщето её без параметра надо вызывать. Параметр - если надо установить точку отсчета.
Без параметра выдаёт ровно такое же количество нулей.
Учим транзакции, учим. Читаем мануалы, читаем. До просветления. Базы - они ведь для того и создавались дабы решить упомянутые проблемы.
LAST_INSERT_ID([expr]) - по поводу последнего вопроса.
На php.spb.ru есть статья, которая называется что-то вроде "Параллельное выполнение скриптов может нарушить целостность данных в базе". Там как раз предлпгпется использоватиь функции LOCK_TABLES и UNLOCK_TABLES. Транзакций в MYSQL НЕТ. В качестве альтернативы транзакциям и имеются функции LOCK_TABLES/UNLOCK_TABLES.
LAST_INSERT_ID([expr]) не знал-СПАСИБО за help! (хотя проьблемы с целостностью он так и не решит(((()
Транзакций в MYSQL НЕТ.
Наглая ложь.
mysql_manual -> 6.7 Команды управления транзакциями и блокировками в MySQL
LAST_INSERT_ID([expr]) не знал-СПАСИБО за help! (хотя проьблемы с целостностью он так и не решит(((()
Обман с особым цинизном. Тот же мануал ->
Значение последнего сгенерированного ID сохраняется на сервере для данного конкретного соединения и не будет изменено другим клиентом. Оно не будет изменено даже при обновлении другого столбца AUTO_INCREMENT конкретной величиной (то есть, которая не равна NULL и не равна 0).
В общем народ, не стесняйтесь, если что еще почитать надо - обращайтесь, ради вас - на любые жертвы :D
Наглая ложь.
mysql_manual -> 6.7 Команды управления транзакциями и блокировками в MySQL
Обман с особым цинизном. Тот же мануал ->
В общем народ, не стесняйтесь, если что еще почитать надо - обращайтесь, ради вас - на любые жертвы :D
Ясно в чём дело просто говорим о разных версиях....
Транзакции работают с 3.23.*
Ясно в чём дело просто говорим о разных версиях....
Транзакции работают с 3.23.*
ъ
ну ребята... повеселили... дык кто ж такое старье юзает?? а Linux у вас тоже HyperThreading не поддерживает, потому что ядро 2.2.Х???
ъ
ну ребята... повеселили... дык кто ж такое старье юзает??
Поверишь???
Поверишь???
Короче, разговора о версиях не было. Было утверждение о том что транзакций нет. В смысле вообще. То же по поводу LAST_INSERT_ID. И не в версиях дело.
Короче, разговора о версиях не было. Было утверждение о том что транзакций нет. В смысле вообще. То же по поводу LAST_INSERT_ID. И не в версиях дело.
И что вы все тут такие грозные? Будто не помощи друг от друга ждём а повода поругаться?
И что вы все тут такие грозные? Будто не помощи друг от друга ждём а повода поругаться?
Ээээ... Забыл рожицы нарисовать. :D :D :D
Поверишь???
вполне :) но надо ж в ногу со временем идти ;)
вполне :) но надо ж в ногу со временем идти ;)
Вполне Логичично.
вполне :) но надо ж в ногу со временем идти ;)
Хорошо идётся, когда дома на локальном серванте сидишь. А когда у хостёра на сегодняшнее число стоит MySQL 3.23.58 - о какой ходьбе в ногу со временем мы говорим?
Хорошо идётся, когда дома на локальном серванте сидишь. А когда у хостёра на сегодняшнее число стоит MySQL 3.23.58 - о какой ходьбе в ногу со временем мы говорим?
У меня такая же проблема хостер обновляет PHP, но MYSQL старый (ну не хочет он его обновить). В ногу со временем надо идти не поодиночку, а всем сразу.
Вот так:
SELECT DISTINCT(LAST_INSERT_ID()) FROM table
Действительно возвращает последний автоинкремент... Но только в том случае, если я в этом же подключении что-то вставляю... Вобщем-то, всё, как и обещал Чигевара:D
Чёрти что творится...:D
вполне :) но надо ж в ногу со временем идти ;)
Нелогично. :)
Лучшее - враг хорошего
Странно как-то ведёт себя MySQL...
Вот так:
SELECT DISTINCT(LAST_INSERT_ID()) FROM table
Действительно возвращает последний автоинкремент... Но только в том случае, если я в этом же подключении что-то вставляю... Вобщем-то, всё, как и обещал Чигевара:D
Чёрти что творится...:D
Тоесть надёжнее всё-таки использовать "SELECT MAX(albm_id) AS max_id FROM album"?
Тоесть надёжнее всё-таки использовать "SELECT MAX(albm_id) AS max_id FROM album"?
Нет, надежнее всё-таки посмотреть в мануал. А там просят делать так:
SELECT LAST_INSERT_ID();
Хорошо идётся, когда дома на локальном серванте сидишь. А когда у хостёра на сегодняшнее число стоит MySQL 3.23.58 - о какой ходьбе в ногу со временем мы говорим?
Togda sovetuu smenit' hostera.
Ia zakon4il proekt dlia Moskvi, tak pereprobivali 3 hosting, sredi nih i masterhost, i nikto ne smog dat' poslednih versii MySQL, a dazhe esli i davali to pochemu to bez utf-8. Hosteri oblenilis' odnozna4no!
Нет, надежнее всё-таки посмотреть в мануал. А там просят делать так:
SELECT LAST_INSERT_ID();
Вообще-то есть функция: mysql_insert_id( )
Она вернет последний id.
Вообще-то есть функция: mysql_insert_id( )
Она вернет последний id.
YES! Вот что мне надо было! Спасибо!