2012-05-20 4 views
3

Я пытался в течение последних нескольких дней попробовать и понять, как извлекать данные из нескольких таблиц, но я не могу сказать, что я полностью понял, как это работает. Anyway :)извлекать изображения из нескольких таблиц mysql с помощью php

Что я пытаюсь сделать, это получить изображения, хранящиеся в нескольких таблицах, используя панель поиска для определения параметров, то есть имя исполнителя (я знаю, что сохранение изображения в базе данных может вызвать множество проблем, но упражнения для университета, поэтому я не могу на самом деле многого о нем потрудиться)

Так, чтобы быть конкретным сейчас. У меня есть 5 таблиц, называемых animaldata, cardata, landscapedata, peopledata и otherdata. Каждая из таблиц имеет следующие поля: 1 id 2 artist_name 3 детали 4 фото 5 фототип и 6 дата. Где artist_name - имя зарегистрированного человека, который загружает изображение, а подробности - подпись, фотография - это элемент blob, который нужно сохранить, а фототип - это ... ну тип изображения: P

Так что я хочу сделать это когда кто-то использует панель поиска для поиска исполнителя, код для извлечения и отображения всех изображений из всех таблиц, которые загрузил художник.

Вот код, который я использую для извлечения данных из 1 таблицы, но я не знаю, как его изменить, чтобы искать другие таблицы.

Это и есть search.php

<?php 
mysql_connect ("localhost","root","") or die (mysql_error()); 
mysql_select_db ("photo_album_db"); 

$term = $_POST['term']; 

$sql = mysql_query("select * from animaldata where artist_name like '%$term%'"); 

while ($row = mysql_fetch_array($sql)){ 
    echo $row['details']; 
echo "</br>"; 
echo "<img src=getan.php?id=".$row['id']." width=250 height=200/>"; 
echo "</br>"; 
} 
?> 

Форма в строке поиска заключается в следующем: <form action="search.php" method="post"><input type="text" name="term" /><input type="submit" name="search" value="Search" /></form>

Заранее спасибо за любые предложения, если вам нужно больше «ключи», дайте мне знать :) :) :)

+4

** Ваш код уязвим для инъекций SQL ** Вы * действительно * должны использовать подготовленные заявления, в котором проходят переменные в качестве параметров, которые не получить оценку для SQL. , Если вы не знаете, о чем я говорю, или как это исправить, прочитайте рассказ о [Bobby Tables] (http://bobby-tables.com). – eggyal

+1

Если его профессора попробуют на него инъекцию SQL, я клянусь, что я взлетею туда и привет-пятеро этих неудачников! –

+0

хахаха милый один! – ekptwtos

ответ

2

Попробуйте это:

// set up database connection ... 

$term = my_awesome_sanitizer($_POST['term']); 

$tables = array("animaldata", "cardata", "landscapedata", "peopledata", "otherdata"); 
foreach ($tables as $table) 
{ 
    $sql = mysql_query("select * from $table where artist_name like '%$term%'"); 
    while ($row = mysql_fetch_array($sql)) 
    { 
     echo $row['details']; 
     // show stuff .... 
    } 
} 
+0

теперь это сделало работу !! СПАСИБО ВАМ, РЕБЯТА! : D ты был действительно полезен !!! – ekptwtos

+0

это делает 5 индивидуальных запросов к базе данных, по крайней мере ** объединение объединяет ** все запросы, чтобы они были отправлены все сразу. –

+1

@Mihai Действительная точка, но ОП пытается понять основы, и это решение легче понять и поддерживать с небольшим штрафом за производительность. –

2

Для изменения таблицы, если они имеют одни и те же столбцы, а затем использовать:

$sql = mysql_query("select animaldata.artist_name AS animaldata_artist_name, cardata.artist_name AS cardata_artist_name /* do this for all columns in all tables, or mor specifically for the columns you need */ from animaldata AS a, cardata AS c, landscapedata AS l, peopledata AS p where a.artist_name like '%$term%' OR c.artist_name like '%$term%' OR l.artist_name like '%$term%' OR p.artist_name like '%$term%'"); 

Попробуйте это для отображения изображения:

<img src="data:image/jpeg;base64,".base64_encode($row['image_blob'])." width... 

Это не будет делать отдельный запрос на фото. Он будет вставлять содержимое изображения в HTML.

Этот метод поддерживается протоколом data:uri.

+0

спасибо, Ive изменил эти вещи, но когда я ищу имя исполнителя, просто пустая страница появляется с ней ничего (но также и ошибок) – ekptwtos

+0

, если вы используете linux try «php -l/path/to/file .php "для проверки ошибок синтаксиса/разбора. –

+0

Ошибки синтаксиса/разбора не отображаются, если файл, который вы просматриваете непосредственно (http://example.com/page.php), имеет их. Они отображаются только в том случае, если файл включен. –

Смежные вопросы