Эта тема на forum.dklab.ru


Anonymous: query from query
Можно ли из данных таблицы сделать новый запрос? Я попытался, но у меня что-то не получилось. Помогите пожалуйста понять, что я делаю не так.

<?php
class query_from_query{
function connect() {
$this->link = mysql_connect($this->host, $this->user, $this->pass);
if (! $this->link) die ("not connected!");
mysql_select_db($this->database) or die ("Fuck!");
$this->result = mysql_query($this->query, $this->link) or die("Error result!" . mysql_error());
}
function start_check() {
$this->query = "SELECT host, db, user, pass, query FROM basa";
$this->host='localhost';
$this->user='xx';
$this->pass='123';
$this->database='xx';
$this->connect();
$this->a_row = mysql_fetch_assoc($this->result);
$this->a_row['host']=&$this->host;
$this->a_row['user']=&$this->user;
$this->a_row['pass']=&$this->pass;
$this->a_row['db']=&$this->database;
$this->a_row['query']=&$this->query;
mysql_close ($this->link);
$this->connect();
print "<table border>";
print "<td><b>id</b></td><td><b>e-mail</b></td>";
while ($this->a_row = mysql_fetch_row($this->result))
{
print "<tr>\n";
foreach ($this->a_row as $this->field)
print "\t <td><b>$this->field</b></td>\n";
print "</tr>\n";
}
print "</table>";
mysql_close ($this->link);
}
}
$obj = new query_from_query();
$obj ->start_check();
?>
CREATE TABLE mytable (
id INT NOT NULL AUTO_INCREMENT,
mail varchar(30),
PRIMARY KEY(id) );
INSERT INTO mytable(mail) VALUES ('hello1@mail.ru');
INSERT INTO mytable(mail) VALUES ('hello@mail.ru');

CREATE TABLE basa (
id INT NOT NULL AUTO_INCREMENT,
host varchar(30),
db varchar(30),
user varchar(30),
pass varchar(30),
query varchar(60),
PRIMARY KEY(id) );
INSERT INTO basa(host,db, user,pass, query) VALUES('localhost','xx','xx', '123', 'SELECT * FROM mytable');

[/PHP:1:73739d7007]
Maus:


$this->a_row = mysql_fetch_assoc($this->result);
$this->a_row['host']=&$this->host;
$this->a_row['user']=&$this->user;
$this->a_row['pass']=&$this->pass;
$this->a_row['db']=&$this->database;
$this->a_row['query']=&$this->query;

Вот это, имхо, нечто болезненное. Вы случаем "право" и "лево" не перепутали?
И вообще сформулируйте, что Вы хотели сделать...

P.S. Про то , что свойства класса было бы неплохо объявлять по человечески, и mysql_connect() на 1 запрос - это расточительно, говорить не хочется...
Anonymous:
Maus

Я хочу, чтобы скрипт делал запрос на данные к другим базам, а потом в цикле конектился к ним(этим базам) и распечатывал их. Чтобы упростить скрипт я убрал цикл у первого коннекта. А баз будет много потом.
Maus:
Код ниже случаем не больше соответствует Вашей задаче?
// хоть и не претендует на правильность (и даже работоспособность :) хотя синтаксических ошибок в нём нет)
class Foo {
var $host;
var $db;
var $user;
var $pass;
var $query;
var $dblink;
var $query_result;

function Foo($data) {
$this->host = $data['host'];
$this->db = $data['db'];
$this->user = $data['user'];
$this->pass = $data['pass'];
$this->query = $data['query'];
$this->connect();
}

function connect() {
$this->dblink = mysql_connect($this->host, $this->user, $this->pass);
// убивать скрипт только из-за провалившегося коннекта -
// не слишком ли сурово в условиях задачи?
if (!$this->dblink) die ('Connect failed.');
mysql_select_db($this->db) or
die ("Can't select database: !".mysql_error ( $this->dblink));
}

function query() {
if (!$this->dblink) return false;
$this->query_result = mysql_query($this->query, $this->dblink) or
die('Query failed: ' . mysql_error());
}

function disconnect() {
if($this->dblink) {
mysql_close($this->dblink) or die('Disconnect failed');
$this->dblink = false;
}
}

function print_result() {
if(!$this->query_result) return false;
print '<table>';
while ($a_row = mysql_fetch_assoc($this->query_result))
{
print "<tr>\n";
foreach ($a_row as $v)
print "\t <td><b>$v</b></td>\n";
print "</tr>\n";
}
print "</table>";
}
}

$main_data = array(
'host' => 'localhost',
'db' => 'xx',
'user' => 'xx',
'pass' => '123',
'query' => "SELECT host, db, user, pass, query FROM basa"
);
$main = new Foo($main_data);
$main->query();
while ($a_data = mysql_fetch_assoc($main->query_result))
{
$a_foo = new Foo($a_data);
$a_foo->query();
$a_foo->print_result();
// раз уж мы не собираемся держать массив открытых соединений, то
$a_foo->disconnect();

}
Anonymous:
Maus
Спасибо!

P.S. А на счет своего аутизма не периживай! Он у меня 6 дней в неделю :)
Anonymous:
Maus
Спасибо!

P.S. А на счет своего аутизма не переживай! Он у меня 6 дней в неделю :)
Anonymous: это опять я
Maus
А Вы настоящий писатель )))

<?php
class query_from_query{


function connect() {
$this->link = mysql_connect($this->host, $this->user, $this->pass);
if (! $this->link) die ("not connected!");
mysql_select_db($this->database) or die ("Sorry, error.");
$this->result = mysql_query($this->query, $this->link) or die("Error result!" . mysql_error());
}
function start_check() {

$this->host = 'localhost';
$this->user = 'xx';
$this->pass = '123';
$this->database = 'xx';
$this->query = 'SELECT host, db, user, pass, query FROM basa';
$this->connect();
while ($counter <= $query) {
while ($this->a_row = mysql_fetch_assoc($this->result)) {
$this->host = $this->a_row['host'];
$this->user = $this->a_row['user'];
$this->pass = $this->a_row['pass'];
$this->database = $this->a_row['db'];
$this->query = $this->a_row['query'];
$this->connect();
while ($this->a_row = mysql_fetch_assoc($this->result)) {
print "<table border>";
print "<td><b>id</b></td><td><b>e-mail</b></td>";
print "<tr>\n";
foreach ($this->a_row as $this->field)
print "\t <td><b>$this->field</b></td>\n";
print "</tr>\n";
print "</table>";
}
}
}
mysql_close($link);
}
}
$obj = new query_from_query();
$obj ->start_check();


?>

Anonymous:
Maus

Все свои слова в отношении Вас беру обратно. Тему можно закрыть.
Maus:
Кто здесь?

Вопрос решен, тему можно закрыть.
Ant:
Тема закрыта.

Эта тема на forum.dklab.ru