[RESOLU] Probleme de connexion PDO

Eléphanteau du PHP | 19 Messages

12 janv. 2015, 21:50

Bonjour,

Je n’arrive pas a me connecter en local avec une application PHP laquelle je devrai faire des modifications.
Voici une copie de l’erreur qui s’affiche:

Connexion échouée : could not find driver
( ! ) Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\inventaireTech\library\classes\class_connexion.php on line 41

Configuration:
Version Apache:2.4.9 et PHP:5.5.12 (wamp sous win 8)

Ma classe connexion:

<?php

class connexion{
public $conn;

function __construct(){
try {

$mode = "PROD";

if($mode == "DEV"){
$dsn = 'dblib:host=monAdresseIp;dbname=DEV_LOCAL_nomDB';
$user = 'inventaireTech';
$password = 'qwerty';
}else{
$dsn = 'dblib:host=monAdresseIp;dbname=nomDB';
$user = 'user';
$password = 'pass';
}

$this->conn = new PDO($dsn, $user, $password, null);
}catch (PDOException $e){
echo 'Connexion échouée : ' . $e->getMessage();
}
}

function query($query){
return $this->conn->query($query);
}

function lastInsertId(){
//return $this->conn->lastInsertId();
$prep = $this->prepare("SELECT SCOPE_IDENTITY() as ID");
$prep->execute();

$res = $prep->fetch();
return $res['ID'];
}

function prepare($req){
return $this->conn->prepare($req);
}

function errorInfo(){
var_dump($this->conn->errorInfo());
}
}
?>

Je débute en PHP ET merci d’avance pour ceux qui peuvent me dépanner

Mammouth du PHP | 688 Messages

12 janv. 2015, 23:34

mysql a bien été installé ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 janv. 2015, 23:57

$dsn = 'dblib
Tu es sûr de vouloir mettre dblib ici ? Car c'est l'ancienne méthode pour se connecter à une base Microsoft SQL Server/Sybase.
Si tu veux vraiment te connecter à une base Microsoft SQL Server, il vaut mieux utiliser ça : http://msdn.microsoft.com/library/cc296172.aspx

Si c'est pour te connecter à une base MySQL, alors il faut remplacer dblib: par mysql:
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 19 Messages

13 janv. 2015, 15:52

Bonjour,
Merci pour ces éléments d’informations. L’application a été conçue comme telle et est opérationnelle; on ma demande de faire des modifications en local et d’après ce que j ai compris, Pour faire fonctionner Microsoft SQL Server et PHP PDO, cela n'est pas forcément aussi simple qu'il n'y paraît. Les messages les plus fréquents que vous pouvez rencontrer sont les suivants : Échec de l'ouverture de session de l'utilisateur ou encore could not find driver (mon cas)...J ai alors installe le driver PDO SQL Server pour Windows (http://www.microsoft.com/en-us/download ... x?id=20098), mais ça ne marche toujours pas...
Merci.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 janv. 2015, 16:39

ça ne marche toujours pas....
Ça ne marche pas n'étant pas un symptôme précis, c'est difficile de trouver ton problème.

Quel est le message d'erreur ?
As-tu suivi la doc dans le lien que je t'ai donné ?

Ils y indiquent notamment qu'il faut utiliser sqlsrv: et pas dblib:est-ce que c'est bien ce que tu as fait ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 19 Messages

14 janv. 2015, 17:27

Bonjour,

Merci pour ces pistes, je viens de résoudre ma connexion avec sqlsrv...

Télécharger le drivers PHP pour SQL Serveur a l’adresse: http://www.microsoft.com/en-us/download ... x?id=20098 (choisissez celui adapte a votre système)
Décompresser, copier et coller les librairies (fichiers dont l'extension est .dll) dans le répertoire bin/ext de PHP
Si vous utilisez Wamp, le répertoire est de cette forme : C:\wamp\bin\php\php5.X.X\ext, avec X correspondant à la version de PHP que vous utilisez.
Les systèmes d'exploitation (OS) supportés par la version 3.0 du driver sont les suivantes :
Windows Server 2008 R2 SP1
Windows Vista SP2
Windows Server 2008 SP2
Windows 7 SP1
Windows 8
Windows 8.1
Les systèmes d'exploitation (OS) supportés par la version 2.0 du driver sont les suivantes :
Windows Server 2003 Service Pack 1
Windows XP Service Pack 3
Windows Vista Service Pack 1 ou supérieur
Windows Server 2008
Windows Server 2008 R2
Windows 7
Lorsque vous aurez copié ces DLL, ouvrez les deux fichiers php.ini (ils ne sont pas situés aux mêmes endroits : l'un se trouve dans C:\Program Files\wamp\bin\apache\Apache2.4.4\bin et correspond à votre fichier ini si vous utilisez PHP en ligne de commandes, on appelle cela le mode CGI, l'autre fichier php.ini se trouve dans le répertoire C:\Program Files\wamp\bin\php\php5.4.16).

Repérez les lignes qui commencent par extension= et rajoutez après toutes les extensions la ligne suivante :
extension=php_pdo_sqlsrv_55_ts.dll

Attention ! si vous utilisez PHP 5.4, remplacez le 55 par 54, ce qui pourra donner :
extension=php_pdo_sqlsrv_54_ts.dll

la mention ts signifie thread safe. En fonction de votre version d'Apache, vous aurez peut-être besoin d'utiliser la version non thread safe de la librairie sql server, dans ce cas, la chaîne à utiliser est la suivante :
extension=php_pdo_sqlsrv_55.dll

... et avec PHP 5.4:
extension=php_pdo_sqlsrv_54.dll

Relancez Apache. Avec WAMP, cliquez sur l'icône W située à gauche de l'heure système; puis cliquez sur Redémarrer les services. Normalement, le W doit redevenir vert.

Et dans la liste des extensions chargées au démarrage, vous verrez pdo_sqlsrv et sqlsrv qui sont rajoutes...

Et hop ca marche...

Ci-joint ma classe connexion qui marche bien:
<?php

	class connexion{
		public $conn;

		function __construct(){
			try {

				$mode = "PROD";

				if($mode == "DEV"){
					$dsn = 'sqlsrv:Server=xxx.xxx.x.xx;Database=DEV_LOCAL_totostock';
					$user = 'inventaireTechnicien';
					$password = 'qwerty';					
				}else{
					$dsn = 'sqlsrv:Server=xxx.xxx.x.xx;Database=tataStock';
					$user = 'Inventaire';
					$password = 'coucou';
				}

				$this->conn = new PDO($dsn, $user, $password, null);
			}catch (PDOException $e){
				echo 'Connexion échouée : ' . $e->getMessage();
			}
		}

		function query($query){
			return $this->conn->query($query);
		}

		function lastInsertId(){
			//return $this->conn->lastInsertId();
			$prep = $this->prepare("SELECT SCOPE_IDENTITY() as ID");
			$prep->execute();

			$res = $prep->fetch();
			return $res['ID'];
		}

		function prepare($req){
			return $this->conn->prepare($req);
		}

		function errorInfo(){
			var_dump($this->conn->errorInfo());
		}
	}
?>
Merci a tous et vive PHP.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

14 janv. 2015, 21:00

Merci à toi pour le partage de la solution :D =D>
Quand tout le reste a échoué, lisez le mode d'emploi...