Erreur mysql

damdam
Invité n'ayant pas de compte PHPfrance

28 sept. 2009, 10:38

Bonjour,
Je vous explique mon problème :
J'ai :
- index.php contenant principalement du html et des appels à des fonctions php
- fonctions.php qui stocke justement le corps de ces fonctions
- db.inc.php qui contient les credentials mysql.

aperçu de fonctions.php :
function db(){
	require_once("db.inc.php");
	$link = mysql_connect($server,$user,$pass);
        mysql_select_db($db,$link))
	return $link;
}
function toto1(){
    $link = db();  // on récupère la ressource mysql
   //traitement divers et requêtes vers la bdd
   toto2();
   mysql_close($link);
}
function toto2(){
    $link = db();  // on récupère la ressource mysql
   //traitement divers et requêtes vers la bdd
     mysql_close($link);
}
etc.
Or j'ai cette erreur suivante :
Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2) 
En cherchant j'ai vu que ca viendrai peut etre du fait que je me connecte 2 fois de suite à la bdd. Est-ce cela ?
Sinon, comment faire pour que mon code ne rappelle pas toujours l'ouverture de bdd ?

Merci de votre aide

ViPHP
ViPHP | 4039 Messages

28 sept. 2009, 10:48

En utilisant l'objet, tu pourrais créer un singleton (un classe qui ne peut être instancié qu'une seule fois, toute nouvelle tentative d'instanciation renvoyant l'objet précédemment crée).


On en a parlé à divers endroits:

post305152.html?hilit=mysql%20singleton#p305152
post302629.html?hilit=mysql%20singleton#p302629
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

damdam
Invité n'ayant pas de compte PHPfrance

28 sept. 2009, 13:03

Salut,
Merci pour ton conseil. J'ai donc construit ma classe mysqli en suivant le pattern singleton.
Mais j'ai toujours la meme erreur :

Code : Tout sélectionner

Can't connect to local MySQL server through socket '/tmp/mysqld.sock' (2)
Une idée ?

damdam
Invité n'ayant pas de compte PHPfrance

28 sept. 2009, 13:30

En fait l'erreur c'est plutot :
require_once("db.class.php");
$mysql = mysql::getInstance();
var_dump($mysql);
$res = $mysql->query("SELECT * from latable");
var_dump($res);
renvoie :
object(mysql)#1 (1) {
  ["objMysqli:private"]=>
  object(mysqli)#2 (0) {
  }
}
// et
NULL
Ma méthode query :
	
public function query($sql){
      return mysqli_query($this->objMysqli, $sql);
}
Le problème est que $res me renvoie NULL, pourquoi ?!

ViPHP
ViPHP | 4039 Messages

28 sept. 2009, 15:47

Qu'est-ce qui se trouvait dans la variable $server ? Manifestement, quelque chose n'arrive pas à se connecter à autre chose.
Vers quel serveur essaies-tu de te connecter ? Et en partant de ou ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

damdam
Invité n'ayant pas de compte PHPfrance

28 sept. 2009, 18:39

$serveur contenant le nom du serveur mysql (localhost par exemple)
J'ai fait des tests et la connexion fonctionne bien avec ma classe mysqli singleton.
le problème c'est faire une requete :( il me renvoie NULL.

ViPHP
ViPHP | 4039 Messages

28 sept. 2009, 22:40

Un résultat de requête mysql ne s'exploite pas tel quel. Tu as regardé du côté des mysql_fetch_assoc() et consœurs ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Invité
Invité n'ayant pas de compte PHPfrance

28 sept. 2009, 22:53

Jai résolu mon problème.
J'appelais mal la méthode query() de mysqli :s
@+