Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, é possível efetuar select dentro de select utilizando o mysqli ?
exemplo:
$sqlestrutura = $mysqli->prepare("SELECT id_estrutura FROM tbl_estruturas ORDER BY peso DESC");
$sqlestrutura->execute();
$sqlestrutura->bind_result($id_estrutura);
while ($sqlestrutura->fetch()) {
echo''.$id_estrutura.'<br />';
}
Isso funciona perfeitamente.
Acontece que eu preciso fazer outro select que depende do $id_estrutura
da seguinte forma:
$sqlestrutura = $mysqli->prepare("SELECT id_estrutura FROM tbl_estruturas ORDER BY peso DESC");
$sqlestrutura->execute();
$sqlestrutura->bind_result($id_estrutura);
while ($sqlestrutura->fetch()) {
$sqlsetorpai = $mysqli->prepare("SELECT sigla,nome FROM tbl_setores WHERE
id_estrutura = '$id_estrutura' ORDER BY nome");
$sqlsetorpai->execute();
$sqlsetorpai->bind_result($sigla,$nome_pai);
while ($sqlsetorpai->fetch()) {
echo'Sigla: '.$sigla.' / Nome do Setor: '.$nome_pai.'<br />';
}
}
Fatal error: Call to a member function execute() on a non-object inCreio que um joinresolva a questão.
com bind tb nao funcionou.
Fatal error: Call to a member function bind_param() on a non-object inC:\xampp\htdocs\radoc141\rh_organograma.php on line 122
$sqlestrutura = $mysqli->prepare("SELECT id_estrutura FROM tbl_estruturas ORDER BY peso DESC");$sqlestrutura->execute();
$sqlestrutura->bind_result($id_estrutura);
while ($sqlestrutura->fetch()) {
if($estrutura_atual <> $id_estrutura){
$estrutura_atual = $id_estrutura;
$tab = "$tab"." ";
}
$sqlsetorpai = $mysqli->prepare("SELECT sigla,nome FROM tbl_setores WHERE id_estrutura = ? ORDER BY nome");
$sqlsetorpai->bind_param('i', $id_estrutura);
$sqlsetorpai->execute();
$sqlsetorpai->bind_result($sigla_pai,$nome_pai);
while ($sqlsetorpai->fetch()) {
echo''.$tab.'Sigla: '.$sigla_pai.' / Nome do Setor: '.$nome_pai.'<br />';
}
}
Vou tentar sem o prepare.
$query = "SELECT id_estrutura FROM tbl_estruturas ORDER BY peso DESC";
if($result = $mysqli->query($query)){
while ($obj = $result->fetch_object()){
$id_estrutura = $obj->id_estrutura;
$query2 = "SELECT nome FROM tbl_setores WHERE id_estrutura = '$id_estrutura' ORDER BY nome";
if($result2 = $mysqli->query($query2)){
while ($obj2 = $result2->fetch_object()){
$nome = $obj2->nome;
echo''.$nome.'<br />';
}
}
}
}
ASSIM FUNCIONOU
Muito obrigado.
O correto é usar:
$mysqli->query
pois com
$mysqli->prepare
você terá que passar o parâmetro via bind
$mysqli->bind_param("s", $id_estrutura);
Entenda a diferença entre os dois ;)
http://php.net/manual/pt_BR/mysqli.prepare.php
http://php.net/manual/pt_BR/mysqli.query.php