OVH Cloud OVH Cloud

Mysql_Fetch_Object et Constantes

3 réponses
Avatar
julien.delvat
Bonjour,

J'essaie de me mettre au Php Objet et je bute sur un probleme qui
devrait pourtant etre simple, a mon avis ...

Je souhaite remplacer mysql_fetch_array par mysql_fetch_object dans
cette sequence la:

// cette section est realisee dynamiquement par une partie precedente
du programme
define('TABLE_COMPETITION', '00_00_competition');
define('FIELD_COMPETITION_ID', 'competition_ID');
define('FIELD_COMPETITION_DIVISION', 'competition_division');
define('FIELD_COMPETITION_DATE', 'competition_date');

// recupere toutes les competitions pour une date donnee
$query = 'SELECT *';
$query .= ' FROM '.TABLE_COMPETITION;
$query .= ' WHERE '.FIELD_COMPETITION_DATE.' = \''.date("Y-m-d",
$unix_date).'\'';
$result = mysql_query( $query );

$competition = array( );
while( $row = mysql_fetch_array( $result ) )
{
$competition[$row[FIELD_COMPETITION_ID]][FIELD_COMPETITION_DIVISION]
= $row[FIELD_COMPETITION_DIVISION];
}

mysql_free_result( $result );


J'ai essayé comme ça:

while( $row = mysql_fetch_object( $result ) )
{
$lo_competition = new Competition;
$lo_competition->ID = $row->FIELD_COMPETITION_ID;
$lo_competition->$date_unix = $unix_date;
$lo_competition->division = $row->FIELD_COMPETITION_DIVISION;
}

mais ca n'est pas reconnu, ni même avec $row->(FIELD_COMPETITION_ID)
ou même $row->$$FIELD_COMPETITION_ID .

Bref, je n'ai pas trouvé comment acceder un attribut d'un objet avec
une constante ...
Est-ce que quelqu'un peut m'aider?

Cordialement,

Julien

3 réponses

Avatar
John GALLET
Bonjour,

mais ca n'est pas reconnu, ni même avec $row->(FIELD_COMPETITION_ID)
ou même $row->$$FIELD_COMPETITION_ID .
Bref, je n'ai pas trouvé comment acceder un attribut d'un objet avec
une constante ...


Il y a peut-être plus simple, mais la syntaxe ci-dessous fonctionne :

<?php
define('C',1);
class maclasse {
var $toto1;
}
$instance=new maclasse;
${"instance"}->{"toto".C}=4;
echo $instance->toto1;
?>

Ceci étant dit, si les propriétés de ton obet mappent les champs de la
table 1 pour 1, peut-être pourrais-tu te contenter d'avoir le nom des
propriétés égal au nom des colonnes, en plus ça t'éviterait de t'emmêler
les pinceaux dans les noms.

a++
JG

Avatar
Julduck
Merci JG,

En effet, ta syntaxe m'a l'air moins lisible.
Je vais rester avec mysql_fetch_array pour l'instant, à moins que
quelqu'un d'autre ait une meilleure idee.
La raison pour laquelle je mappe les champs par des constantes est que
mes tables peuvent etre utilisees par plusieurs sites en meme temps,
donc avec des noms de champs plus ou moins differents, en particulier
pour les noms de table.
Je vais peut-etre reconsiderer la question pour les noms de champs, tu
as raison ...

A plus,

Julien
Avatar
frederic girard
Julduck wrote:
Merci JG,

En effet, ta syntaxe m'a l'air moins lisible.
Je vais rester avec mysql_fetch_array pour l'instant, à moins que
quelqu'un d'autre ait une meilleure idee.
La raison pour laquelle je mappe les champs par des constantes est que
mes tables peuvent etre utilisees par plusieurs sites en meme temps,
donc avec des noms de champs plus ou moins differents, en particulier
pour les noms de table.
Je vais peut-etre reconsiderer la question pour les noms de champs, tu
as raison ...

A plus,

Julien
Il me semble qu'il existe plusiseurs methodes d'écriture de variables

dynamiques :
Dans votre cas :

class MyObj{
var $test = "un test";

}
define(A,"test");
$obj = new MyObj();

echo $obj->{A}; //affiche 'un test'


Ceci fonctionne;)