8768 sujets

Développement web côté serveur, CMS

Bonjour à tous, je m'heurte à une difficulté, lié je pense à mon manque de maîtrise de php et mysql.

J'ai réussi à me connecter à la base de donnée avec mysqli.

Dans ma base de donnée, il y a la table 'alph' avec deux champs, num et let. (numéro et lettre associée ).

Je voudrais récupérer l'entrée du champ 'let' correspondant à l'entrée 'num'.

Je prépare ma requête:
<?php $stmt = $mysqli->prepare("SELECT let FROM alph WHERE num = ?");


notez que num est une variable.

J’exécute ma requête:
$stmt->bind_param("i", $num);


Dans mon cas-test $num = 1, j'ai vérifié la variable est bien là.

Je récupère le résultat:
$res = $stmt->get_result();


Je l'écris sur ma page:
echo $res['let']; ?>


Et là, rien ne s'écrit sur la page, tout le code en dessous ne s'affiche plus.
Je coince un peu, quelqu'un voit où ça merdouille.

Pour plus de clarté je mets le code d'un bloc:

<?php 
$stmt = $mysqli->prepare("SELECT let FROM alph WHERE num = ?");
$stmt->bind_param("i", $num);
$res = $stmt->get_result();
echo $res['let'];
 ?>


merci d'avance Smiley jap
Modifié par hkza (28 Feb 2016 - 11:44)
Modérateur
Bonjour,

Premièrement, il se peut que $stmt->get_result(); ne fonctionne pas chez toi parce que le driver mysqlnd n'est pas présent. Une alternative est d'utiliser $stmt->bind_result.

Ensuite, pour récupérer le résultat, il faut utiliser $stmt->fetch ou un équivalent (tout simplement parce qu'il peut y avoir plusieurs résultats qui correspondent à la requête dans le cas général).

Essaie de remplacer
$res = $stmt->get_result();
echo $res['let'];
par
$stmt->execute();
$stmt->bind_result($let);
while ($stmt->fetch()) echo $let;
Amicalement,
Modifié par parsimonhi (28 Feb 2016 - 10:35)
Bonjour,

Effectivement j'ai bien libmysql driver d'installé et non mysqlnd driver ( lors de mon installation de php je ne l'ai pas activé ). Peut-être est-ce réversible ?

Sinon j'ai essayé avec le code de remplacement, sans succès. Du coup, le contenu de $let ne s'affiche pas, mais le reste de la page oui.

Peut-être est-ce du à ce mysqlnd driver qui n'est pas activé.

Sinon j'ai essayé un autre code:

$req = mysqli_prepare($bdd, 'SELECT let FROM alph WHERE num = ?');
mysqli_stmt_bind_param($req, "i", $num);
mysqli_stmt_execute($req);
mysqli_stmt_bind_result($req, $donnees['let']);
mysqli_stmt_fetch($req);
echo $donnees['let'];


Qui ne retourne rien non plus.

Smiley mur

En fait je viens de trouver... j'avais oublié de
$num = $_GET['num'];


Comme un boulet. Mais pas sans intérêt aux vues des recherches effectuées.

Donc maintenant ce code:
$num = $_GET['num'];
$stmt = $bdd->prepare("SELECT let FROM alph WHERE num = ?");
$stmt->bind_param("i", $num);
$stmt->execute();
$stmt->bind_result($let);
while ($stmt->fetch()) echo $let;


fonctionne ! Me reste plus qu'à sécuriser tout ça ! Merci l'ami Smiley jap