![]() |
Поможите!
<?
$db_mysql = "blablabla"; function connect ($host_mysql = "localhost:3306",$user_mysql = "qwe", $pswd_mysql = "wer") { return mysql_connect($host_mysql,$user_mysql,$pswd_mysql); } function konkurs ($db_mysql,$id) { return mysql_db_query($db_mysql,"select * from CHEGOTO where ID=".$id); } $conn =connect(); $result = konkurs ($db_mysql,1); while ($info = mysql_fetch_array($result)) { print $info[PHOTO]; } mysql_free_result($result); ?> Есть такой вот скриптик. выбираю из таблицы все записи с условием $id. Таких записей у меня 2. Ваваливаю одно из полей (в поле лежат фотки, тип: longblob). Проблема, если вываливаю поле с фотками, то на странице отображается, только первая из них, если любое другое поле (строковые поля), то вываливает данные подряд всех записей. Мне надо чтобы он выкладывал все фотки какие найдет под таким $id. В чем косяк? |
SergeyFastEye,
$info[PHOTO] -- это нехорошо.. это константа, PHP ругнется и сделает из нее строку 'PHOTO'. если такое поле есть, то все ок. а вообще, по тому, что ты привел.. вроде все нормально. если не трудно, то посмотреть бы нормальные запросы, и результаты их работы |
ладно постараюсь выложить куда-нить, чтобы с Нета бало доступно.
А результаты никакие, все работает, если поле указываю строкового типа. Если картинка, то только одну фотку выкладывает и только первую |
то есть если "select title, name ..." то все записи выводятся, а если "select photo ..." то только одна фотография?
ты хочешь чтобы они все выводились на одной странице? |
Цитата:
не совсем. вывод меняем тут. while ($info = mysql_fetch_array($result)) { print $info[PHOTO]; } выводится всего одна фотка while ($info = mysql_fetch_array($result)) { print $info[name]; } выводится 2 name'а |
SergeyFastEye
Понятно. фотки тоже две выводятся.. :) только показывается одна. посмотри исходник странички. как бороться с этим не знаю. можно попробовать выводить в отдельный iframe каждую картинку.. можно сохранять на диск, и выводить в теге <img>... можно попробовать imagecreatefromstring() |
Скажу одно - в html картинки выводятся тэгом IMG, и ни чем другим. следовательно, надо делать не print в php, а по-другому...
содзается пустой php файл (скажем, img.php), в котором пишешь только один оператор на вывод этой картинки (через параметр), а в главном файле делаешь его вызов. Т.е.: Код:
$conn =connect();Код:
<? print $img ?> |
ivahaev
не пройдет.. гетом можно совсем немножко передавать... Цитата:
|
Ребята, ivahaev, is_absent вы оба правы но не совсем доконца.
Действительно, методом ГЕТ большие бинарные строки лучше не пердавать в общем случае. И действительно нужно выводить фотографию через отдельный скриптик, при этом необходимо еще выводить заголовки в браузер, вроде "header('Content-type: image/jpeg');". При этом из файла img.php можно выводить только по одной фотографии!!!. Тоесть подводя итог, д.б. нечто наподобие следующего: Основной код: Код:
<?Код:
<? |
Hubbitus
два раза в базу коннектиться... нехорошо.. а в остальном -- скорее всего самоем простое решение :) Цитата:
|
Цитата:
Цитата:
Ну раз уж меня начали поправлять и критиковать, то тогда тоже замечу мимоходом ;) : Цитата:
Код:
<? |
кстати, если connection string тот же самый, то снова реального коннекта не будет(в mysql по крайней мере), функция просто вернет новый идентификатор, но ресурсы загружаться по новой не будут.
главное не делать mysql_close(). |
Sheryld
что значит не будет? скрипт отработал -- php сам отрубил коннект. даже если ты его не закрыл. Цитата:
ну и вообще к вопросу о хранении изображения в базе.. может все-таки на файлики перейти? ) все сразу и отпадет... делать, как предлагал Hubbitus только вместа $id, передавать имя файлика в скрипт. и с коннектом проблем не будет, и с количеством запросов. и еще... :) "limit $i, $i" -- получить $i(вторая) строк начиная со строки с номером $i(первая)... не это надо однако... limit $i, 1 имхо должно быть.. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
я уже писал про это. попробуй написать функцию, где каждый раз делается одно и тоже:
открывается соединение(но connection string не меняется), делается запрос, идет обработка результата(скажем в ассоциативный массив). а теперь запихни эту функцию в цикл(скажем 100.000 итераций) и смотри что будет с конекшинами(любым монитором для mysql). в моих "опытах", mysql не открывал каждый раз новый connection. http://imho.ws/showthread.php?t=64225 - вот тут я писал об этом. я имею ввиду следущую вещь: можно коннектиться сколько угодно много раз к базе, это не скажеться на производительности, если соединение не закрыто, и connection string не меняется. мое имхо, там присутсвует внутренний connection pool, который как раз и занимается непосредственно реальными коннектами к базе, а mysql_connect - это всего лишь обращение к pool. я когда проектирую функции бизнес-логики, то делаю примерно так: Код:
function GetItenById($itemId)Код:
for($i=0;$i<1000;$i++)может, я конечно не прав. |
Цитата:
Ну и это какраз другой случай - здесь куча обращений к базе в одном скрипте - естественно никто и не говорит что в одном скрипте нужно для каждого запроса коннектится к базе. P.S. А вообще, Вам всем, не кажется, что мы очень далеко отклонились от темы вопроса? Можно создать новый топик, если это интересно... Да и автор сам молчит... |
Я не молчу, просто только сейчас до компа добрался, а до всвоего домашнего так и до сих пор добраться не могу. :) Потому нет возможности выложить результаты и принять направленное участие в обсуждении.
Идея с отдельным файликом неплохая, жаль сам не сообразил. |
Sheryld
в твоем случае, все действия выполняются в одном скрипте и одном запросе к серверу. В этом случае, ты конечно прав. но если вызывается другой скрипт (не включается, а вызывается), то он начнет выполнятся только после того, как ответ от текущего скрипта придет к браузеру. а придет этот ответ (в общем случае) после того, как отработает весь скрипт. это означает, что даже если ты сам не закрыл соединение с базой данных (или любой другой ресурс), то PHP сам оборвет это соединение. в данном случае, если SergeyFastEye будет хранить изображения в файловой системе, то никаких дополнительных скриптов не понадобится (см пост 13 и 14). В противном случае - об этом уже говорилось выше - будет созаваться еще одно соединение с базой данных. |
| Часовой пояс GMT +4, время: 01:58. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.