Je me suis fait réprimander car j'ai déterré un ancien échange :-) , j'ai écris en MP à la personne mais pas de réponse, du coup, j'ouvre un sujet
Je veux migrer mon site en PHP sur un serveur free mais je n'ai pas trouvé comment me connecter à mysql (j'ai suivi le cours sur le PHP), ma modif de index.php n'est pas bonne mais je ne sais pas pourquoi:
Ca marche en local avec Wamp, j'ai tout migré sur le serveur free, j'ai modifié la ligne de index.php en mettant
Mets juste php56 1 dans ton .htaccess et vérifier que tu n'aies pas fait d'erreur (pas de BOM, sur le nom du fichier .htaccess et sans autre extension, etc)
Si ça plante sur le try, c'est que tu es (toujours) sur la version PHP 4 puisque try a été introduit par PHP 5
Il ne trouve manifestement pas la BD indiquée puisqu'il m'écrit à l'endroit où ça se passe : "ERREUR, could not find driver" et du coup, il me vient une question:
Lorsque je lui demande de s'y connecter:
$bdd = new PDO('mysql:host=localhost;dbname=maBD;charset=utf8;port=3306;', 'mon_login', '');
j'entre le nom de ma BD, mon login et, bien sûr, je n'entre pas mon mot de passe dans le code mais, comment fait-il pour s'y connecter si je ne lui indique pas de mot de passe ?
Jusqu'à maintenant en local sur mon ordi avec Wamp, je ne m'étais pas posé la question puisque je devais m'y connecter pour que ça marche mais, sur le serveur free, ça ne doit pas se passer pareil... Je ne dois quand même pas mettre mon mot de passe dans le code ... ?
Ce n'est pas une question de base de données. C'est le pilote, l'interface PDO pour un SGBD donné qui n'est pas disponible (ça correspond au début du DSN, le mysql:). PDO en lui-même n'est qu'une couche d'abstraction, disons que pour illustrer il fournit les interfaces (POO) que les pilotes doivent ensuite implémenter. Derrière, pour MySQL, tu as une extension pdo_mysql qui implémente ces différentes interfaces et c'est elle qui permet réellement de s'interfacer avec MySQL mais si celle-ci n'est pas disponible, tu seras incapable de ne serait-ce que te connecter à MySQL.
Tu as activé quelle version de PHP ?
Avec php56 1, tu as la version 5.6.34 où PDO est activé avec les drivers pour PostgreSQL + MySQL + SQLite donc à moins d'avoir touché le DSN, tu ne devrais pas obtenir cette erreur.
Par contre avec php 1, tu te retrouves en 5.1.3RC4-dev où PDO est disponible mais ne gère (drivers) que sqlite(2). Dans ce dernier cas, ce serait normal de se retrouver avec cette erreur.
Il faut tout de même avouer que mettre quelque chose en production chez Free, ce n'est pas l'idée du siècle.
Avec php 56 1, la page entière me donnait une erreur et du coup, je suis revenu avec php 1 dans le .htaccess mais ça ne change rien, j'ai toujours l'erreur, comme s'il ne trouvait pas mysql...
sqlite, c'est un autre serveur de BD ?
Pour free, j'ai pris parce que c'est gratuit et je me disais que pour tester en ligne avant plus, ce serait mieux.
Je peux me faire héberger ailleurs, si ça doit être moins galère, ...tu te fais héberger où toi ?
> Avec php 56 1, la page entière me donnait une erreur
Quelle était-elle ?
> je suis revenu avec php 1 dans le .htaccess
Oublie, ça ne fonctionnera pas : impossible d'utiliser MySQL via PDO ni même mysqli avec cette version ... Seules ces foutues fonctions mysql_* obsolètes sont possibles.
> sqlite, c'est un autre serveur de BD ?
Oui et non : c'est du local (pas réseau), bien plus limité et pas du tout fait pour du concurrentiel. Bon, si le but est de tester et que tes requêtes SQL sont très standard, ça pourrait le faire mais j'en doute (rien que la syntaxe voire même simplement créer ta bdd)
> Je peux me faire héberger ailleurs, si ça doit être moins galère, ...tu te fais héberger où toi ?
Ca dépend de ton budget et de tes compétences. Honnêtement un VPS, c'est quand même le pied : tu fais ce que tu veux (parce qu'héberger autre chose que du PHP ou faire du "temps réel" en mutualisé, c'est quasi impossible) comme tu veux. La première et meilleure offre, c'est 3 € HT par mois de tête chez OVH. (c'est aussi une bonne opportunité pour apprendre tout ce qui est administration système si peu qu'on soit un minimum intéressé par ça)
Pour du gratuit et mutualisé, je ne saurais te dire.
Il n'y a pas d'espace entre php et 56, je me disais c'est bizarre qu'il n'y ait pas une erreur PHP surtout que sur cette version les erreurs PHP sont affichées (display_errors à on)
Mais après, il y a encore d'autres erreurs.... On s'entraine sur Wamp, ça fonctionne mais en fait, quand on migre sur un vrai serveur, ça n'a plus rien à voir ....
Il y a toute une ribambelle de post sur le forum sur cette erreur là mais je n'en ai pas trouvé qui semble me concerner, j'obtiens cette erreur là pour chacun de mes fichiers:
Fatal error: Call to a member function prepare() on null in /var/www/sda/7/7/coupdepouceautisme/educatrice_specialisee_presentation.php on line 234
La ligne en question est:
$req = $bdd->prepare('INSERT INTO compteur(page_index) VALUES(:page_index)');
$bdd est définie avant, le reste de la phrase est logique, la bd existe, la table compteur aussi, le champ page_index aussi, rien de tout cela n'est Null
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller le code dans la zone prévue.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
$monfichier = fopen('compteur_index.txt', 'r+');
$page_index = fgets($monfichier); // On lit la première ligne (nombre de pages vues)
$page_index +=1; // On augmente de 1 ce nombre de pages vues
fseek($monfichier, 0); // On remet le curseur au début du fichier
fputs($monfichier, $page_index); // On écrit le nouveau nombre de pages vues
// 2 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);
?>
<?php
// On envoie la variable $page_index dans la table "compteur" de la BD "coupdepouceautisme"
try
{
$bdd = new PDO('mysql:host=localhost;dbname=coupdepouceautisme;charset=utf8;port=3306;', 'coupdepouceautisme', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
// $bdd = new PDO('mysql:host=sql.free.fr;dbname=compteur;charset=utf8;port=3306;', 'coupdepouceautisme', '');
$req = $bdd->prepare('INSERT INTO compteur(page_index) VALUES(:page_index)');
$req->execute(array(
'page_index' => $page_index
));
?>
Avec ce code, tu as une Call to a member function prepare() on null ? Ca me paraît impossible.
Mais il manque un bout du code (il manque au moins la balise de début de code) et ton DSN n'est pas bon, parce que tu devrais avoir sql.free.fr en host me semble-t-il.
PS : au lieu de t'"amuser" à (dé)commenter ta connexion en fonction de si tu es en local ou non, tu dois pouvoir faire un truc comme ça :
if ($_SERVER['HTTP_HOST'] == 'localhost') {
$bdd = new PDO('mysql:host=localhost;dbname=coupdepouceautisme;charset=utf8;port=3306;', 'coupdepouceautisme', '');
} else {
$bdd = new PDO('mysql:host=sql.free.fr;dbname=compteur;charset=utf8;port=3306;', 'coupdepouceautisme', '');
}
(voir mieux en rendant que les paramètres de connexion conditionnels)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli