if (isset ($_GET['id']) AND ctype_digit ($_GET['id'])) { $id = security ($_GET['id']); $query = mysql_query("SELECT * FROM image WHERE id=$id") or die(mysql_error()); if (mysql_num_rows($query)>0) { $file = mysql_result($query, 0, 'ifile'); $size = mysql_result($query, 0, 'size'); $type = mysql_result($query, 0, 'type'); header("Content-length: $size"); header("Content-type: $type"); echo $file; } }
PHP
#1
Отправлено 13 августа 2007 - 16:01
#2
Отправлено 13 августа 2007 - 19:15
1. действительно ли ссылка на файл существует в базе?
2. и, насколько я знаю, обращение к базе идет в строгой последовательности, т.е. сначала авторизация, затем запрос. Первого в данном куске кода не вижу.
в остальном тебе помогут знающие люди.
и где же смысл?
IAPB48
#3
Отправлено 13 августа 2007 - 20:18
действительно файл существует, столбик типа LONGBLOB, там показан размер в байтах загруженного файла.1. действительно ли ссылка на файл существует в базе?
я просто этот кусок не включил и так понятно, что я бы получил в таком случае ошибку связи с БД2. и, насколько я знаю, обращение к базе идет в строгой последовательности, т.е. сначала авторизация, затем запрос. Первого в данном куске кода не вижу.
#4
Отправлено 14 августа 2007 - 00:03
Если тут всё окей (всё выводится правильно), то наверное картинка в БД у тебя битая... Может пробел стоит вначале скрипта или в конце между <?php и ?>header("Content-length: $size");
header("Content-type: $type");
echo $file;
А за такое обычно руки обламывают Надо использовать mysql_fetch_* и далее работать с массивом.$file = mysql_result($query, 0, 'ifile');
$size = mysql_result($query, 0, 'size');
$type = mysql_result($query, 0, 'type');
#6
Отправлено 14 августа 2007 - 22:58
совершенно верно, контент файла просто-напросто неверное обрабатывался функцией безопасности, которую я часто использую. его нужно было обрабатывать по-другомуЕсли тут всё окей (всё выводится правильно), то наверное картинка в БД у тебя битая... Может пробел стоит вначале скрипта или в конце между <?php и ?>
а какая разница? с массивом по-моему есть смысл иметь дело когда тебе возвращается более чем одна строчка из БД, так на самом деле удобнее. а когда дело имеем с единственной, то так тоже никто не запрещал делатьА за такое обычно руки обламывают Надо использовать mysql_fetch_* и далее работать с массивом.
#7
Отправлено 14 августа 2007 - 23:07
Ты похоже, не понимаешь как работает функция mysql_fetch_assoc она возвращают массив только одного ряда, так бы вернуло массив array( 'file', 'size', 'type' ) с данными. Просто в документации сказанокакая разница? с массивом по-моему есть смысл иметь дело когда тебе возвращается более чем одна строчка из БД, так на самом деле удобнее. а когда дело имеем с единственной, то так тоже никто не запрещал делать
Просто такой стиль может "прижиться" и потом будет сложно отучиваться, так что лучше делать сразу и правильно Я например, использую mysql_result только когда у меня возвращается одно значение, например с запросом, select count(*)... В остальных случаях или объекты или массивы.Работая с большими результатами запросов, следует использовать одну из функций, обрабатывающих сразу целый ряд результата. Так как эти функции возвращают значение нескольких ячеек сразу, они НАМНОГО быстрее mysql_result(). Кроме того учтите, что указание численного смещения работает намного быстрее, чем указание колонки, или колонки и таблицы через точку.
#8
Отправлено 15 августа 2007 - 00:53
разумно, буду знатьПросто такой стиль может "прижиться" и потом будет сложно отучиваться, так что лучше делать сразу и правильно Я например, использую mysql_result только когда у меня возвращается одно значение, например с запросом, select count(*)... В остальных случаях или объекты или массивы.