Jump to content
Luis Correia

Aceder a cada id da base de dados

Recommended Posts

Luis Correia

Boas,

Como faço para executar uma query para aceder a cada id da base de dados em php?

Share this post


Link to post
Share on other sites
Virneto

A tua questão está muito genérica, por isto, esta resposta também :D .

Para executares uma query e solicitares/inserires/editares/eliminares dados numa base de dados, por exemplo em MySql, através de um script, começas por definir neste script, uma ligação a uma bd que já tenhas.

Depois executas a tua query, que para ir buscar uma lista de id's poderia ser mais ou menos assim:

SELECT id,nome,idade FROM utilizadores WHERE id > 0;	#dá-me todos os id,nome e idade da tabela "utilizadores" onde id seja maior que 0

ou para ires buscar apenas um determinado id:

SELECT id,nome,idade FROM utilizadores WHERE id =6;   #dá-me todos os id,nome e idade da tabela "utilizadores onde id seja igual a 6

Mas a tua questão denota que talvêz estejas a iniciar nestas andanças e se assim for, convém que começes por perceber a lógica da coisa. Vê aqui na wiki. há vários exemplos que podes explorar e experimentar.

have fun!!


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Luis Correia

eu já percebo um pouco de mysql, o problema e que quero inserir a query para n número de id's e a única maneira que vejo é através de um ciclo mas não sei como aceder a todas as id's separadamente...

munbozz eu nunca usei PDO, isso é uma maneira para tratar objectos em PHP?

Share this post


Link to post
Share on other sites
munkbozz

eu já percebo um pouco de mysql, o problema e que quero inserir a query para n número de id's e a única maneira que vejo é através de um ciclo mas não sei como aceder a todas as id's separadamente...

munbozz eu nunca usei PDO, isso é uma maneira para tratar objectos em PHP?

Como assim aceder separadamente? E de que 'id's' estámos nós a falar, não queres antes dizer colunas?

Sim, PHP Data Objects, é uma interface para o acesso a base de dados, penso que atualmente é a que suporta mais tipos de linguagens.

Edited by munkbozz

Share this post


Link to post
Share on other sites
Luis Correia

Como assim aceder separadamente? E de que 'id's' estámos nós a falar, não queres antes dizer colunas?

Sim, PHP Data Objects, é uma interface para o acesso a base de dados, penso que atualmente é a que suporta mais tipos de linguagens.

eu tenho um método que transfere os dados de um tabela para outra mas quando executo ele move os dados de todas as linhas e não apenas de um especifica linha como eu queria

não sei se isto ajuda :confused:

Share this post


Link to post
Share on other sites
fil79

eu tenho um método que transfere os dados de um tabela para outra mas quando executo ele move os dados de todas as linhas e não apenas de um especifica linha como eu queria

não sei se isto ajuda :confused:

Não estarás a fazer um INSERT em vez de um UPDATE?


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Luis Correia

eu estou a fazer insert pois vou inserir os dados numa nova tabela, isto é o que tenho até agora

$query = "SELECT * FROM registo;
$result = mysql_query($query);
if() {
		 while ($row = mysql_fetch_array($result)) {
			 mysql_query("INSERT INTO tabela1 (campo1, campo2, campo3) VALUES('" . $row['valor1'] . "', '" . $row['valor2'] . "', 'string')");
			 mysql_query("INSERT INTO tabela2 (campo1, campo2, campo3. campo4) "
					 . "VALUES ('" . $row['valor1'] . "' , '" . $row['valor2'] . "' , '" . $row['valor3'] . "' , '" . $row['valor4'] . "')");

eu quero passar os dados de uma tabela para outras duas, mas quando fazia isso ele passava todos os dados da tabela e não apenas a linha na qual estava a trabalhar

juntei o ciclo if mas não sei o que pôr nele para trabalhar numa só linha e não na tabela toda...

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
fil79

estás a fazer um select ($query = "SELECT * FROM registo;)...depois listas os registos e dentro do ciclo estás a fazer dois inserts. Se a tabela registo tiver 1000 registos estaras a fazer 2000 inserts.

Não te falta um WHERE em $query = "SELECT * FROM registo WHERE id=qqnumero;

?


MCITP-MCTS-MCP

Share this post


Link to post
Share on other sites
Luis Correia

estás a fazer um select ($query = "SELECT * FROM registo;)...depois listas os registos e dentro do ciclo estás a fazer dois inserts. Se a tabela registo tiver 1000 registos estaras a fazer 2000 inserts.

Não te falta um WHERE em $query = "SELECT * FROM registo WHERE id=qqnumero;

?

mas eu nao tenho um id específico quero para aceder a cada id separadamente

como uso o WHERE em $query = "SELECT * FROM registo WHERE id=qqnumero; para qualquer id?

Share this post


Link to post
Share on other sites
Virneto

como uso o WHERE em $query = "SELECT * FROM registo WHERE id=qqnumero; para qualquer id?

$query="SELECT id,nome,idade FROM registos WHERE id > 0"; //todos os registos com id superior a 0
$retorno = mysql_query($query);
//neste momento $retorno será um array com os dados apanhados
while ($linha = mysql_fetch_array($retorno)) {
/** neste momento, para cada elemento do array com nome de $linha terás um array em que
$linha[0] será id, $linha[1] será nome e $linha[2] será idade (SELECT id,nome,idade) **/

   if ($linha[0] == 1) {  //se o id corresponde à tua condição faz uma segunda query
   $query2="UPDATE registos SET nome='blabla' WHERE id='$linha[0]'";
   $retorno2 = mysql_query($query2);

   }
}

Isto está muito em cima do joelho. Na wiki aqui do p@p tens vários exemplos de como fazer o que pretendes. Convém que pesquises um pouco e utilizes de vêz msqli ou PDO.


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Luis Correia

$query="SELECT id,nome,idade FROM registos WHERE id > 0"; //todos os registos com id superior a 0
$retorno = mysql_query($query);
//neste momento $retorno será um array com os dados apanhados
while ($linha = mysql_fetch_array($retorno)) {
/** neste momento, para cada elemento do array com nome de $linha terás um array em que
$linha[0] será id, $linha[1] será nome e $linha[2] será idade (SELECT id,nome,idade) **/

   if ($linha[0] == 1) {  //se o id corresponde à tua condição faz uma segunda query
   $query2="UPDATE registos SET nome='blabla' WHERE id='$linha[0]'";
   $retorno2 = mysql_query($query2);

   }
}

Isto está muito em cima do joelho. Na wiki aqui do p@p tens vários exemplos de como fazer o que pretendes. Convém que pesquises um pouco e utilizes de vêz msqli ou PDO.

eu testei esse código e da me este erro

mysql_fetch_array() expects parameter 1 to be resource, boolean

$query = "SELECT * FROM registo";
while( $row = mysql_fetch_array($query)){
   mysql_query("INSERT INTO entrada (user, pass) VALUES('" . $row['campo1'] . "', '" . $row['campo2'] . "')");
}

eu tinha este código a funcionar mas o problema neste é que quando eu quero mover um dos elementos da tabela ele move a tabela toda

Share this post


Link to post
Share on other sites
Virneto

mysql_fetch_array() expects parameter 1 to be resource, boolean

A query está a retornar falso (booleano), ou seja, tens um problema na query.

experimenta:

INSERT INTO entrada (user, pass) VALUES("utilizador", "pass");


"Que inquieto desejo vos tortura, Seres elementares, força obscura? Em volta de que ideia gravitais?" >> Anthero de Quental

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Linuxando.com | ...

Share this post


Link to post
Share on other sites
Luis Correia

A query está a retornar falso (booleano), ou seja, tens um problema na query.

experimenta:

INSERT INTO entrada (user, pass) VALUES("utilizador", "pass");

mas o problema e que não pretendo inserir os valores no código mas sim em campos a preencher numa página

Share this post


Link to post
Share on other sites
HappyHippyHippo

vamos lá por os pontos nos i's.

se continuas a não dar informação nenhuma, não irás ter uma única resposta decente.

responde com SIM ou NÃO : queres copiar os valores de uma tabela para outras duas tabelas ?

se NÃO : explica com palavras em português correcto, legível e inteligível o que pretendes

se SIM : apresenta a seguinte informação

- nome da tabela de origem

- nome de cada uma das colunas da tabela de origem que pretendes que sejam copiadas

- nome das duas tabelas de destino dos dados

- nome de cade uma das colunas das duas tabelas de destino onde pretendes que os dados sejam copiados

sem essa informação, eu e muitos outros (tirando alguns que gostam de adivinhar) não são capazes de te tirar as dúvidas


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Luis Correia

vamos lá por os pontos nos i's.

se continuas a não dar informação nenhuma, não irás ter uma única resposta decente.

responde com SIM ou NÃO : queres copiar os valores de uma tabela para outras duas tabelas ?

se NÃO : explica com palavras em português correcto, legível e inteligível o que pretendes

se SIM : apresenta a seguinte informação

- nome da tabela de origem

- nome de cada uma das colunas da tabela de origem que pretendes que sejam copiadas

- nome das duas tabelas de destino dos dados

- nome de cade uma das colunas das duas tabelas de destino onde pretendes que os dados sejam copiados

sem essa informação, eu e muitos outros (tirando alguns que gostam de adivinhar) não são capazes de te tirar as dúvidas

eu quero copiar os valores para uma tabela e destruir esses mesmos dados na tabela de origem

- registo

- id, nome, nif, morada, localidade, email, sexo, dia, mes, ano, setor, pass

- entrada e utilizadores

- da tabela de entrada é -> user, pass (nesta tabela apenas quero que seja copiado os dados nif e pass que serve para entrar no sistema)

- da tabela de utilzadores é -> id, nome, nif, morada, localidade, email. sexo, dia, mes, ano, setor, pass

Share this post


Link to post
Share on other sites
munkbozz

Então o que tu necessitas é...

- INSERT INTO SELECT (Inserir os dados na tabela X, seleccionado dados da tabela Y).

- DROP TABLE(Apagar tabela) ou TRUNCATE TABLE(Eliminar todos os dados de uma tabela).

Share this post


Link to post
Share on other sites
HappyHippyHippo
// altera a gosto
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$schema = 'db';

$db = new mysqli($host, $user, $pass, $schema);
if ($mysqli->connect_error) {
 die("Connect error ({$db->connect_errno}) {$db->connect_error}");
}

/* copiar para a tabela ENTRADA */
$sql = "insert into entrada (`user`, `pass`)
              select `nif`, `pass` from `registo`";
if ($db->query($sql) === false) {
 die("Query execution error ({$db->connect_errno}) {$db->connect_error}");
}

/* copiar para a tabela UTILIZADORES */
$sql = "insert into utilizadores (`id`, `nome`, `nif`, `morada`, `localidade`, `email`, `sexo`, `dia`, `mes`, `ano`, `setor`, `pass`)
              select `id`, `nome`, `nif`, `morada`, `localidade`, `email`, `sexo`, `dia`, `mes`, `ano`, `setor`, `pass` from `registo`";
if ($db->query($sql) === false) {
 die("Query execution error ({$db->connect_errno}) {$db->connect_error}");
}

/* remover registos de origem */
$sql = "delete from `registo`";
if ($db->query($sql) === false) {
 die("Query execution error ({$db->connect_errno}) {$db->connect_error}");
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Luis Correia

// altera a gosto
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$schema = 'db';

$db = new mysqli($host, $user, $pass, $schema);
if ($mysqli->connect_error) {
 die("Connect error ({$db->connect_errno}) {$db->connect_error}");
}

/* copiar para a tabela ENTRADA */
$sql = "insert into entrada (`user`, `pass`)
		   select `nif`, `pass` from `registo`";
if ($db->query($sql) === false) {
 die("Query execution error ({$db->connect_errno}) {$db->connect_error}");
}

/* copiar para a tabela UTILIZADORES */
$sql = "insert into utilizadores (`id`, `nome`, `nif`, `morada`, `localidade`, `email`, `sexo`, `dia`, `mes`, `ano`, `setor`, `pass`)
		   select `id`, `nome`, `nif`, `morada`, `localidade`, `email`, `sexo`, `dia`, `mes`, `ano`, `setor`, `pass` from `registo`";
if ($db->query($sql) === false) {
 die("Query execution error ({$db->connect_errno}) {$db->connect_error}");
}

/* remover registos de origem */
$sql = "delete from `registo`";
if ($db->query($sql) === false) {
 die("Query execution error ({$db->connect_errno}) {$db->connect_error}");
}

este código devolve dois erros Undefined variable: mysqli in C:\wamp\www\Netbeans\PW\funcoes.php on line 123 e Trying to get a property of non-object na mesma linha e devolve Query execution error (0)

e este não vai aceder a cada linha separadamente pois não?

Edited by Luis Correia

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.