Connexion de base de données avec PDO et classe Singleton
Je suis en train d'établir une connexion de base de données avec PDO et une classe Singleton, mais je vais avoir de la difficulté à extraire des données de la base de données.
J'ai lu sur ce sujet, mais je ne suis toujours pas sûr de savoir comment appeler le Singelton classe dans mon fichier de base de données à partir d'un autre fichier et obtenir les résultats imprimés.
L'erreur que je reçois à l'instant est Fatal error: Call to undefined function query()
dans mon db.php fichier, qui est le dernier de la fonction dans mon fichier de base de données. Cependant, je crois que la fonction est définie.
Toute aide est très appréciée!
Voici ma base de données (db.php) le fichier de connexion:
<?php
class Database
{
private $_db;
static $_instance;
private function __construct() {
$this->_db = new PDO('mysql:host=localhost;dbname=mvcuser', 'root', '');
$this->_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
private function __clone(){}
public static function getInstance() {
if (!(self::$_instance instanceof self)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function query($sql) {
return query($this->_db,$sql);
}
}
Et voici le code de mon index.php fichier:
<?php
require_once 'model/db.php';
$db = Database::getInstance();
$db->query('SELECT * FROM users');
if ($result = $db->query($query)) {
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo $row;
}
}
- Supprimer la
if
, ça n'a pas de sens... à Faire:$result = $db->query(...)
... - Ok! Mais Im toujours la même erreur:(
- oui le
if
ne font sens! - Ce n'est pas logique, c'est appeler
query
deux fois, c'est ce que je voulais dire... - Dois-je donc écrire: if ($result = $db) {} à la place?
- pourquoi voulez-vous un singleton? Pourquoi n'utilisez-vous pas cru instance de PDO? Eu aucun problème avec elle?
- Son travail et devaient avoir une classe Singleton et PDO avec la connexion de base de données, pour objectif d'apprentissage:) Si vous avez une idée de ce que Im faire de mal s'il vous plaît laissez-moi savoir. Je n'ai pas très bien compris comment appeler la requête à partir de mon fichier d'index... @YourCommonSense
- vous avez dit deux fois déjà. se débarrasser de
if () {
ligne et correspondant accolade de fermeture - et écrire de la ligne précédente comme $result = $db->query('SELECT * from users');
- Pas une seule personne a dit de se débarrasser de la si et puis on m'a dit de ne pas se débarrasser de ça:/ j'ai essayé de se débarrasser de la si, mais ça n'a pas fonctionné non plus... je me fais l'erreur undefined variable de requête, mais n'est-il pas défini de cette façon: $db->query('SELECT * from users'); ??? Si j'écris ceci à la place: $query = "SELECT * from users"; Im obtenir le message d'erreur: Tableau de conversion de chaîne de caractères... @YourCommonSense
- dans quelle ligne vous obtenez cette erreur?
- Merci!!!!!! Ses résolus enfin et la requête $est défini:) me semble compliquer de temps en temps! J'ai besoin d'écrire: echo $row['username']; et il fonctionne. Mais je n'ai pas tout à fait comprendre pourquoi je ne peux pas juste l'écho le trou $row? C'est quand j'ai le Tableau de conversion de chaîne de caractères d'erreur... @YourCommonSense
- parce que c'est un tableau. Pouvez-vous porter toute la wardobe, ne pouvez-vous pas? Non, vous pouvez porter une robe à la fois. Même avec l'écho des tableaux
- Ok, je comprends:) je pensais que j'avais fait une variable qui a été en mesure d'imprimer le trou de la ligne avec un mot... Merci pour votre aide! @YourCommonSense
Vous devez vous connecter pour publier un commentaire.
La définition de votre
Database::query
méthode n'a pas de sens. On dirait que vous êtes l'appel des fonction PHPquery
(qui n'existe pas) et donc vous obtenez le message d'erreur.Je pense que vous pouvez changer la méthode de définition:
Mise à jour: et dans votre
index.php
if ($result = $db->query($query)) {
mais je ne vois pas la variable $query défini quelque part$query
n'est pas définie n'importe où. Voir ma mise à jour de réponse - là, j'ai remplacer$query
avec$statement
.Je sais que cette quête est un peu vieux, mais pour toute personne qui le trouve à partir de Google si vous ne voulez pas créer un wrapper de la méthode pour chaque AOP méthode, vous pouvez l'utiliser à l'intérieur de votre classe singleton.
Maintenant, vous pouvez utiliser
$db->query($statement)
ou de tout autre AOP méthode sans avoir à définir à l'intérieur de votre classe singleton.Juste pensé à cette question. - Je faire autre façon de connecter la base de données. C'est également inclus formulaire. c'est comme ça.
PHP
HTML
Codage vraiment sympa. Je l'aime. 🙂