[RESOLU] Problème lors de la conversion d'un fichier php 4 vers php 5

Eléphanteau du PHP | 10 Messages

28 janv. 2013, 16:08

Bonjour tout le monde,


Avant toute chose, je m'excuse si mon message ne se trouve pas dans la bonne section, j'en ai choisi une assez neutre en espérant qu'elle correspond bien à mon problème.

Je dispose d'un fichier initialement prévu pour php 4 (lequel fichier marche sans la moindre erreur). J'ai entrepris de le convertir pour qu'il soit pleinement compatible avec php 5. La plus part du travail se passe bien, hormis un bout de code (qui se trouve être à plusieurs endroits dans le fichier) et qui me génère une erreur que je ne parviens pas a corriger :

Code : Tout sélectionner

Notice: Object of class mysqli_result could not be converted to int in C:\Program Files (x86)\EasyPHP-12.1\www\test\db\mysqli.php on line xxx
Voici l'une des méchantes fonctions qui me posent problème. A chaque fois j'ai indiqué l'erreur juste au dessus de la ligne problématique
		function sql_fetchrow($query_id = 0)
		{
			if($query_id === 'cache' && $this->cached)
			{
				return count($this->cache) ? array_shift($this->cache) : false;
			}
			
			if( !$query_id )
			{
				$query_id = $this->query_result;
			}

			if( $query_id )
			{
				// 
				// Erreur :
				// Object of class mysqli_result could not be converted to int on line xxx
				// 
				$this->row[(int)$query_id] = @mysqli_fetch_array($query_id, MYSQL_ASSOC);
				if($this->caching)
				{
					//
					// Pas d'erreur mais surement que le le (int)
					// est problématique
					//
					if($this->row[(int)$query_id] === false)
					{
						$this->write_cache();
					}
					//
					// Pas d'erreur mais surement que le le (int)
					// est problématique
					//
					$this->cache[] = $this->row[(int)$query_id];
				}
				// 
				// Erreur :
				// Object of class mysqli_result could not be converted to int on line xxx
				//
				return $this->row[(int)$query_id];
			}
			else
			{
				return false;
			}
		}
Jusqu'à présent mes tentatives de correction ont soit abouti sur une page toute blanche, soit sur un message die et au lieu d'avoir ma page, certes avec des notices partout, j'ai des messages m'indiquant qu'il n'y a plus de communication avec ma base de données.


Au cas ou ça pourrait donner une vue d'ensemble, voici le fichier originel (en php4) et voici le fichier que j'ai commencé à modifier (en php5)


Est ce que quelqu'un pourrait me donner un coup de main ou au moins me mettre sur la voie ?


Par avance, je remercie tous les intervenants.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 janv. 2013, 22:43

salut,

il ne faut pas utiliser des variables ainsi
if( !$query_id )
{
$query_id = $this->query_result;
}


c'est source d'erreur. (la tous ce qui est équialent à false comme zéro, null ou false va valider la condition).
Dans ce cas $query_id contient un ressource mysqli

ajoute ds var_dump($query_id) pour voir ce que ça contient.

Tu peux aussi utiliser un debuggueur (comme xdebug).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 10 Messages

29 janv. 2013, 12:39

Merci pour la réponse, je vais corriger ça ^^

Pas bête pour le debuggueur, je savais que ça existait mais je n'avais jamais eu l'idée d'en utiliser un :lol:
Modifié en dernier par achaab le 29 janv. 2013, 23:49, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

29 janv. 2013, 14:42

Faut gérer un compteur et ne plus utiliser le retour de mysqli_query qui ne peut plus être exploité comme un entier.