Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pienkovski

INNER JOIN com Warning

Recommended Posts

Olá pessoal,

Por favor, deem uma olhada nesse código e me digam o que há de errado. Eu não estou conseguindo encontrar o erro.

<?
$cod = "021";
include "conexao.php";
$sql = "SELECT g.*, s.'cor' AS stonedata FROM 'gemstone' AS g INNER JOIN 'stonedata' AS s ON g.'cod' = s.'cod' WHERE cod='$cod'";
$res = mysql_query($sql);

while($row = mysql_fetch_assoc($sql,$res)){
$cod = $row["cod"];
$nom = $row["nom"];
$cut = $row["cut"];
$pre = $row["pre"];
$cor = $row["cor"];
$ima = $row["ima"];

echo "$cod,<br>$nom,<br>$cut,<br>$pre,<br>$cor,<br><img src='$ima' border='0'>";
}
?>

Está dando o seguinte erro:

 

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in d:\blue gem\easyphp_bluegem\www\root\bluegem\ver_estoque.php on line 12

 

Não consigo encontrar a razão desse "warning".

 

Se eu faço tabela por tabela, sem usar o INNER JOIN não aparece "warning" algum. O que será que está errado?

 

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigi o código mas o warning continua.

<?
$cod = "021";
include "conexao.php";
$sql = "SELECT g.*, s.'cor' AS stonedata FROM 'gemstone' AS g INNER JOIN 'stonedata' AS s ON g.'cod' = s.'cod' WHERE cod='$cod'";
$res = mysql_query($sql);

while($row = mysql_fetch_assoc($res)){
$cod = $row["cod"];
$nom = $row["nom"];
$cut = $row["cut"];
$pre = $row["pre"];
$cor = $row["cor"];
$ima = $row["ima"];

echo "$cod,<br>$nom,<br>$cut,<br>$pre,<br>$cor,<br><img src='$ima' border='0'>";
}

?>

O warning continua:

 

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in d:\blue gem\easyphp_bluegem\www\root\bluegem\ver_estoque.php on line 12

Compartilhar este post


Link para o post
Compartilhar em outros sites

para nomes de tabelas e de campos, use CRASE e não aspas simples

 

além disso, sempre execute com um or die() em desenvolvimento, para q o codigo te mostre o motivo do erro

 

$sql = "SELECT g.*, s.`cor` AS stonedata FROM `gemstone` AS g INNER JOIN `stonedata` AS s ON g.`cod` = s.`cod` WHERE cod='$cod'";
$res = mysql_query($sql) or die( mysql_error() );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as correções sugeridas pelo William Bruno e o Warning sumiu.

Agora apareceu:

Coluna 'cod' em 'where clause' é ambígua

 

É, realmente elas são iguais, apesar de estarem em tabelas diferentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, amigos,

o código agora está assim:

<?
$cod = 021;
include "conexao.php";
$sql = "SELECT g.*, s.`cor` AS stonedata FROM `gemstone` AS g INNER JOIN `stonedata` AS s ON g.`cod` = s.`cod` WHERE s.`cod`=`$cod`";
$res = mysql_query($sql)or die( mysql_error() );

while($row = mysql_fetch_assoc($res)){
$cod = $row["cod"];
$nom = $row["nom"];
$cut = $row["cut"];
$pre = $row["pre"];
$cor = $row["cor"];
$ima = $row["ima"];

echo "$cod,<br>$nom,<br>$cut,<br>$pre,<br>$cor,<br><img src=$ima border='0'>";
}
?>

 

E o erro está assim:

 

Coluna '17' desconhecida em 'where clause'

 

Isso tá parecendo brincadeira. Eu também desconheço essa coluna '17'. Que loucura é essa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não use crase na variável, somente em nomes de campos, tabelas e bancos que se aplica

..WHERE s.`cod` = `$cod`

use

..WHERE s.`cod` = '$cod'

 

se cod for numérico, sem aspas

..WHERE s.`cod` = $cod

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bem,

o código agora está assim:

<?
$cod = 020;
include "conexao.php";
$sql = "SELECT g.*, s.`cor` AS stonedata FROM `gemstone` AS g INNER JOIN `stonedata` AS s ON g.`cod` = s.`cod` WHERE s.`cod`= 020";
$res = mysql_query($sql)or die( mysql_error() );

while($row = mysql_fetch_assoc($res)){
$cod = $row['cod'];
$nom = $row['nom'];
$cut = $row['cut'];
$pre = $row['pre'];
$cor = $row['cor'];
$ima = $row['ima'];

echo "$cod,<br>$nom,<br>$cut,<br>$pre,<br>$cor,<br><img src=$ima border='0'>";
}
?>

 

E os erros estão assim:

Se lá no SELECT eu colocar a variável $cod, não aparece nada na página.

 

Se eu substituir a variável pelo número do código aparecem os campos da tabela gemstone. Não aparece o campo 'cor' da tabela stonedata.

e aparece o seguinte Notice:

 

Notice: Undefined index: cor in d:\blue gem\easyphp_bluegem\www\root\bluegem\ver_estoque.php on line 17

 

Ou seja, parece que esse código não consegue tirar os registros das duas tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se lá no SELECT eu colocar a variável $cod, não aparece nada na página.

e onde você cria essa variavel ?

qual o valor dela ? analise.

 

 

 

Notice: Undefined index: cor in d:\blue gem\easyphp_bluegem\www\root\bluegem\ver_estoque.php on line 17

isso quer dizer, q o teu select, não está retornando o dado com esse nome.

Analise melhor a estrutura das suas tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você usa o phpmyadmin ?

 

Teste seu SQL direto no phpmyadmin, é muito mais fácil para você, quando o SQL estiver retornando exatamente o que você quer daí sim execute pelo PHP

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.