Ouvrir deux tables en même temps

Résolu/Fermé
Said_de_lyon Messages postés 18 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 29 août 2015 - Modifié par pijaku le 3/01/2014 à 08:33
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 - 28 déc. 2013 à 19:56
Bonjour,
Voici mon code qui me cause des problèmes :

<?php
$hostname = "db123456789.db.ccm.com";

$database = "db123456789";

$username = "dbo123456789";

$password = "";

$bdd = mysqli_connect("$hostname", "$username", "$password", "$database");

if (! $bdd)   {die ('Erreur: '. mysqli_error()); }

$pseudo = $_POST['pseudo'];
$motdepasse = $_POST['motdepasse'];
$pseudo ="monpseudo";
$motdepasse="1234567";
$oui = 'Oui';
$i = 0;

$data_tab_livres = array();

$reponse = mysqli_prepare($bdd,'SELECT id FROM  marque_page WHERE pseudo=? AND motdepasse=? AND pagemarquee=?');
mysqli_stmt_bind_param($reponse, 'sss', $pseudo, $motdepasse, $oui);
mysqli_stmt_execute($reponse);
mysqli_stmt_bind_result($reponse, $id);


while (mysqli_stmt_fetch($reponse))
{
        $i++;
        $reponse2 = mysqli_prepare($bdd, 'SELECT id , titre FROM livre WHERE id=?');
        mysqli_stmt_bind_param($reponse2, 'i', $id);
        mysqli_stmt_execute($reponse2);
        mysqli_stmt_bind_result($reponse2, $id, $titre);
        mysqli_stmt_fetch($reponse2);
        $data_tab_livres[$i] = array('id' => $id , 'titre' => $titre);
        mysqli_close($reponse2);
}


mysqli_stmt_close($reponse);

echo json_encode($data_tab_livres);
?>


Mon problème : $titre à pour résultat une valeur vide.
A chaque page marquée de la table "marque_page", il existe un id qui a un titre dans la table "livre".
Ce sont des livres dans la table "livre" avec des pages marquées dans la table "marque_page".
Je ne sélectionne que les champs dont j'ai besoin pour ce code.
Je pense que je ne peux pas déclarer $reponse2 sans fermer $reponse.
Ce qui me surprend.
Je n'en suis pas convaincu.
Et vous, qu'en pensez-vous.
Pouvez-vous m'aider.
Merci
Saïd

EDIT : Les infos hosts, data, username etc... ont été modifiées par la modération

2 réponses

MrYAU31 Messages postés 3808 Date d'inscription samedi 23 février 2013 Statut Membre Dernière intervention 8 juillet 2017 1 611
28 déc. 2013 à 19:32
Bonjour,
Essaye en ne faisant qu'une seul requête. Ce sera plus simple.
Un truc du genre
SELECT id , titre FROM livre WHERE id in (SELECT id FROM marque_page WHERE pseudo=? AND motdepasse=? AND pagemarquee=?)
0
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
28 déc. 2013 à 19:34
Bonsoir,

Si j'ai bien compris c'est deux tables qui ont un champs commun? Pourquoi pas un INNER JOIN alors?
0
Said_de_lyon Messages postés 18 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 29 août 2015 2
Modifié par pijaku le 3/01/2014 à 08:33
$reponse = mysqli_prepare($bdd,'SELECT id, titre FROM  marque_page WHERE pseudo=? AND motdepasse=? AND pagemarquee=?
INNER JOIN livre ON marque_page.id = livre.id');
mysqli_stmt_bind_param($reponse, 'sss', $pseudo, $motdepasse, $oui);
mysqli_stmt_execute($reponse);
mysqli_stmt_bind_result($reponse, $id, $titre);

Peut-on faire une requête préparé avec INNER JOIN comme je fait.
Car c'est pire qu'avant. Je n'ai qu'une table vide comme résultat
0
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
Modifié par gardiendelanuit le 28/12/2013 à 19:56
Plutôt:
SELECT M.id, L.titre FROM marque_page M INNER JOIN livre L ON M.id = L.id WHERE M.pseudo=? AND M.motdepasse=? AND M.pagemarquee=?

En supposant que pseudo et motdepasse appartiennent à la table marque_page.
0