Page 1 sur 1

obtenir le résultat requete MySQLi

Posté : 22 août 2012, 12:31
par Limehit
Bonjour à tous, alors voilà, j'ai commencé à apprendre MySQLi et j'ai déjà un problème, je ne sais pas quelle fonction correspond à mysql_result car je veux retourner juste un résultat.
	$test =  new mysqli($core->config['MySQL']['hostname'], $core->config['MySQL']['username'],
	$core->config['MySQL']['password'], $core->config['MySQL']['database']);

	$de = $test->query("SELECT id FROM users LIMIT 1");


Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 13:00
par Mazarini
http://php.net/manual/fr/mysqli-result.fetch-array.php : le premier exemple est très bien

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 13:02
par xTG
$de est un objet ressource, tu peux itérer dessus avec les fonctions de type fetch.
Plus d'informations dans le documentation : http://fr2.php.net/manual/fr/mysqli.qui ... ements.php

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 13:46
par Limehit
Ma page reste toujours blanche excepté pour le num_rows

<?php

require_once "global.php";
require_once INCLUDES . 'class.db.mysqli.php';

$database = new ClassMySQL($core->config['MySQL']['hostname'], $core->config['MySQL']['username'],
$core->config['MySQL']['password'], $core->config['MySQL']['database']);
$database->Connect();

$mysqli = $database->link;

$result = $mysqli->query("SELECT id FROM users LIMIT 1");

echo $result->num_rows;
echo $result->free();

?>

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 14:09
par Mazarini
echo $result->num_rows;
echo $result->free();

La première ligne doit afficher 1 (à cause du limit 1 de l'ordre sql)
Le seconde 1 si le free se passe bien

Quand est il en pratique ? 11 ?

Ce serai plus judicieux de faire :
echo 'Numrows = "',$result->num_rows,'<br>"';
echo 'Free = "',$result->free(),'"<br>';

As tu lu les doc qui ont été proposées ?

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 14:36
par Limehit
ça ne fonctionne toujours pas!
J'ai Free = ""

J'ai lu la documentation mais je ne trouve pas comme remédier au problème.

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 14:43
par xTG
Au risque de me répéter...
Car free() c'est pas pour afficher le retour de la requête mais pour libérer la mémoire.
$de est un objet ressource, tu peux itérer dessus avec les fonctions de type fetch.
Plus d'informations dans le documentation : http://fr2.php.net/manual/fr/mysqli.qui ... ements.php

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 15:08
par Limehit
<?php

require_once "global.php";
require_once INCLUDES . 'class.db.mysqli.php';

$database = new ClassMySQL($core->config['MySQLi']['hostname'], $core->config['MySQLi']['username'],
$core->config['MySQLi']['password'], $core->config['MySQLi']['database']);
$database->Connect();

$mysqli = $database->link;

$result = $mysqli->query("SELECT username FROM users ORDER BY RAND() LIMIT 1");
$row = $result->fetch_assoc();
echo 'Free = "',$row['username'],'" a été tiré au sort<br>';

echo mysql_result($result);

?>
ça marche, mais n'y a t-il pas moyen de faire plus simple ?

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 15:30
par Mazarini
Non, c'est le procédé normal : exécution de la requête puis lecture ligne à ligne.

En général il y a une boucle de lecture puisque on ne sait pas combien il y a de résultat. Eventuellement, tu pourrais contrôler qu'il y a bien 1 enregistrement de retourné (cas table vide).
Il faudrait aussi vérifier que l'exécution de la requête ne retourne pas d'erreur.

Re: obtenir le résultat requete MySQLi

Posté : 22 août 2012, 15:42
par xTG
Pas de boucle dans ce cas là, il y a un LIMIT 1.
Par contre la requête peut ne pas retourner de résultat et il faudrait donc vérifier num_rows.

Re: obtenir le résultat requete MySQLi

Posté : 23 août 2012, 22:34
par Limehit
En me documentant un peu plus, j'ai créer la fonction que je voulais :D et je souhaite vous en faire part
function mysqli_get_result($query, $row, $field = '')
{
	mysqli_data_seek($query, $row);
	
	if (strlen(trim($field)) > 1)
	{
		return mysqli_fetch_object($query)->$field;
	}
	
	$result = mysqli_fetch_row($query);
	return $result[0];
}