Как вывести из MYSQL все строки одного поля в одну переменную?

krum

Новичок
Как вывести из MYSQL все строки одного поля в одну переменную?

Структура сайта: index.php, template.tpl, config.php и engine.php.
Содержание template.tpl:
Код:
<html>
<head>
<title>{TITLE}</title>
</head>
<body>
{OUTPUT}
</body>
</html>
Содержание index.php:
PHP:
<?
require "engine.php";
require "config.php";
$tpl->get_tpl('template.tpl');
$tpl->set_value('TITLE', $title);
$tpl->set_value('OUTPUT', $output);
$tpl->tpl_parse();
echo $tpl->html;
?>
Содержание config.php:
PHP:
<?
if ($page)
$query = "select * from $page";
$result = mysql_query($query);
$row = mysql_fetch_array ($result);
$title = $row['title'];
$output = $row['text'];
?>
В файле engine.php производится замена {TITLE} и {OUTPUT}
соответствующими переменными $title и $output.

База данных содержит таблицы price, contact, news.
В таблицах price и contact всего одна строка с полями id и text.
Соответственно, если $page=price то переменная $output получает
строку из таблицы price из поля text, что видно из файла config.php.
Но.. В таблице news не одна строка, там их может быть хоть 1000.
Выводить по одной нужной строке из таблицы news проще простого:
PHP:
<?
if ($page)
$query = "select * from $page.$id";
$result = mysql_query($query);
$row = mysql_fetch_array ($result);
$title = $row['title'];
$output = $row['text'];
?>
Передавая в запросе не только значение переменной $page, но и значение переменной $id.

А вот как вывести все строки из таблицы news, поля text и передать их в переменную $output?
Вот в чем вопрос!
 

Фанат

oncle terrible
Команда форума
не очень понятна конструкция "select * from $page.$id"
она действительно работает?
 

krum

Новичок
Допустим $page=news, а переменная $id=7
Тогда запрос принимает вид
PHP:
$query = "select * from news WHERE id=7";
В предыдущем посте ошибочка.
 

Фанат

oncle terrible
Команда форума
это уже ближе к истине.
а зачем отдельные таблицы для price и contact?
и слышал ли ты когда-нибудь такое слово, как SQL injection?
 

krum

Новичок
Слышал )) Такая структура - это все на что у меня хватило воображения )). Послушаю ваши советы с удовольствием. Желательно с примерами.
 

x-yuri

Новичок
krum почитай про sql-инъекции
если ты хочешь все в одну таблицу запихнуть, создай в ней поле-индикатор "тип записи". Только неужели у тебя эти три таблицы так похожи?
 

krum

Новичок
Приведенный выше пример структуры сайта, конечно не является точной копией моего сайта. Это сделано для того, чтобы можно было понять суть вопроса. Sql-инъекции меня не особо беспокоят, т.к. во-первых, в реальном коде меры приняты и во-вторых, вряд ли кому в голову придет идея ломать мой сайт, он для узкого круга пользователей и не содержит каких либо важных данных.
Но, вернемся к сути вопроса )) Есть ли советы по поводу выбора всех строк из таблицы news поля text в одну переменную? Это вообще возможно?
 

x-yuri

Новичок
Но, вернемся к сути вопроса )) Есть ли советы по поводу выбора всех строк из таблицы news поля text в одну переменную? Это вообще возможно?
ну есть такая штука как массив
 

Фанат

oncle terrible
Команда форума
Это сделано для того, чтобы можно было понять суть вопроса.
ну, мы не такие тупые, как тебе могло показаться.

К вопросу сути вопроса.
Откуда у тебя этот код работы с базой?
И почему ты не взял оттуда же код получения нескольких строк?
 

krum

Новичок
Там этого нет ((. Вот про массивы.. Может есть какие то варианты?
 

Фанат

oncle terrible
Команда форума
а покажи, где.
может есть, а ты не нашел?

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

krum

Новичок
Это книжка )) Колисниченко, "Движок для вашего сайта"
Но там этого нет.
Можно сделать так (подсказали на другом форуме):
PHP:
while( $row = mysql_fetch_array ($result)) {
$output[]=$row['text'];;
}
print_r($output);
Но.. Мне нужен конечный результат в виде:
$output =
Вот так не получается:
PHP:
$output = print_r($output);
Выдает ошибку:
Fatal error: [] operator not supported for strings in (номер строки)
Вот эта строка:
$output[]=$row['text'];
Если изменить:
PHP:
while( $row = mysql_fetch_array ($result)) {
$massiv[]=$row['text'];
}
$output = print_r($massiv);
То в нужном месте, т.е. там, где стоит {OUTPUT} выводится: 1
А весь маcсив выводится сверху )) Т.е. срабатывает print_r прямо в config.php
выглядит он так:

Array ( [0] => тра ля ля, тра ля ля, тра ля ля.
[1] => бла бла бла, бла бла бла, бла.
[2] => трям трям, трям трям, трям трям. )
Мне же надо получить в переменную $output уже отформатированный текст,
без "Array ( [0] =>" и, желательно, в таком виде:
PHP:
 $output = 'тра ля ля, т... <a href="#">Читать далее</a><hr />
 бла бла бла... <a href="#">Читать далее</a><hr />
 трям трям, т...  <a href="#">Читать далее</a><hr />';
 

Фанат

oncle terrible
Команда форума
но тебе ведь не нужен массив. тебе нужна строка.
почему бы не почитать в документации, как работать со строками?

-~{}~ 08.02.09 17:28:

я не верю, что в какой бы то ни было книжке по пхп не было конструкции while( $row = mysql_fetch_array, либо её эквивалента.
я думаю, виноват не автор, а читатель
 

krum

Новичок
Вопрос уже почти решен. Делается так:
PHP:
while( $row = mysql_fetch_array ($result)) { 
$massiv[]=$row['text']; 
} 
$output = implode("<hr />",$massiv);
Вывод получается такой:
тра ля ля, тра ля ля, тра ля ля. <hr />
бла бла бла, бла бла бла, бла. <hr />
трям трям, трям трям, трям трям. <hr />
Осталось последнее, отформатировать строку так, чтобы выводились первые допустим сто символов и после стояла ссылка на id этой строки:
тра ля ля, т... <a href="?page=news&id=тра">Читать далее</a><hr />
бла бла бла... <a href="?page=news&id=бла">Читать далее</a><hr />
трям трям, т... <a href="?page=news&id=трям">Читать далее</a><hr />
 

Фанат

oncle terrible
Команда форума
во-первых, вопрос решен неправильно
во-вторых, как я тебе уже говорил, тебе нужна работа со строками.
постарайся ознакомиться.
на первый раз я тебе дам ссылки.
потом учись пользоваться документацией самостоятельно
[m]types.string[/m]
[m]strings[/m]
 

krum

Новичок
Объясни, почему вопрос решен не правильно? И зачем мне нужна работа со строками? Что не так?
 

Фанат

oncle terrible
Команда форума
да потому что массив здесь нужен, как собаке пятая нога!
когда ты ешь кашу, ты ее сначала кладешь в карман, а потом из кармана в рот?
или, все-таки сразу в рот?
тогда почему сейчас ты сначала кладешь данные в массив, а потом из массива в строку, вместо того, чтобы их сразу класть в строку?
 

krum

Новичок
Я просто не вижу способов, как можно каждую строку записать в переменную, без использования массива.
 

Фанат

oncle terrible
Команда форума
правильно. потому что ты не знаешь языка пхп, самого элементарного его синтаксиса. ну так надо его учить!
тебе надо добавлять к одной строке другую. а потом к ней же каждую последующую, правильно? ну вот и добавляй.
тебе нужен оператор объединения строк.
http://ru.php.net/manual/ru/language.operators.string.php
 
Сверху