Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interrogation sur les fonctions mysql

2 réponses
Avatar
CrazyCat
Bonjour à tous,

j'utilise fréquemment mysql mais il y a une chose que je ne comprends
pas bien. J'ai fait une petite classe pour simplifier mon utilisation
des bases (et avoir un pseudo recordset) mais selon le serveur que
j'utilise, le fonctionnement diffère.

La classe contient (j'élimine ce qui n'est pas intéressant pour mon
problème):

function query($query) {
$this->query = trim($query);
if ($this->resultid = mysql_query($this->query, $this->connectid)) {
if (preg_match('!^select!i', $this->query)) {
$this->_fetch_assoc();
} elseif (preg_match('!^(insert|replace)!i', $this->query)) {
$this->_insert_id();
}
$this->_count();
}
}

function _count() {
$this->num_rows = 0;
$this->affected_rows = 0;
if (isset($this->resultid)) {
if (preg_match('!^select!i',$this->query)) {
//$this->num_rows = mysql_num_rows($this->resultid);
$this->num_rows = mysql_num_rows();
} else {
//$this->affected_rows = mysql_affected_rows($this->resultid);
$this->affected_rows = mysql_affected_rows();
}
}
}

Vous pouvez noter les 2 lignes commentées dans la fonction _count(). Et
bien selon le serveur ou je suis, l'utilisation (ou pas) de
$this->resultid en paramêtre de mysql_num_rows() ou de
mysql_affected_rows() provoque une erreur.

Je ne remarque pas ce souci aujourd'hui, je vous rassure, mais
j'aimerais bien comprendre et surtout savoir comment faire pour avoir
une classe utilisable partout sans avoir à la modifier.

Merci bien.

--
Réseau IRC Francophone: http://www.zeolia.net
Aide et astuces webmasters : http://www.c-p-f.org
Communauté Francophone sur les Eggdrops: http://www.eggdrop.fr

2 réponses

Avatar
Sylvain SF
CrazyCat a écrit :
Bonjour à tous,



bonjour,

La classe contient (j'élimine ce qui n'est pas intéressant pour mon
problème):



j'ai toujours utilisé les variantes avec paramètres.

Vous pouvez noter les 2 lignes commentées dans la fonction _count(). Et
bien selon le serveur ou je suis, l'utilisation (ou pas) de
$this->resultid en paramêtre de mysql_num_rows() ou de
mysql_affected_rows() provoque une erreur.



soit c'est erratique pur, ce serait inattendu.
soit cela dépends de la version de PHP (ou de sa compile).
avez-vous noté des différences de versions entre les 2 configs ?

une classe utilisable partout sans avoir à la modifier.



ou peut être de manière déterministe vis a vis d'une info
serveur (telle la version de PHP ou apache ou mysqld ...)

Sylvain.
Avatar
Pascal PONCET
CrazyCat a écrit :
Vous pouvez noter les 2 lignes commentées dans la fonction _count(). Et
bien selon le serveur ou je suis, l'utilisation (ou pas) de
$this->resultid en paramêtre de mysql_num_rows() ou de
mysql_affected_rows() provoque une erreur.



Bonjour,

Je crois savoir que l'argument de type "result resource" est obligatoire
pour la fonction "mysql_num_rows()".
Par contre, il est facultatif avec la fonction "mysql_affected_rows()".

Si les fonctions sont bien utilisées et que l'erreur persiste sur un
serveur, il serait intéressant d'en connaître le message pour tenter de
comprendre.

Cordialement,
Pascal