requête de base de données mysql à partir de l'intérieur de la classe
Je suis en train de lancer une requête à une base de données MySQL à partir de l'intérieur d'une classe et il ne fonctionne pas pour une raison quelconque. J'ai la classe dans un fichier séparé qui je suis un lien avec le require_once()
fonction.
voici ce que le principal .php fichier ressemble à ceci:
<?php
require_once("connect.php");
require_once("theClass.php");
$a = new theClass;
$a->runQuery();
}
connect.php:
<?php
//connect to mySQL database
$mysqli = new mysqli("host", "user", "password", "db");
if ($mysqli->connect_errno)
{
echo "<br><h1>Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error . "</h1><br>";
}
theClass.php:
<?php
require_once('connect.php');
class theClass
{
//class variables and other functions here
function runQuery()
{
$query = "SELECT col_1 FROM db.table";
$stmt = $mysqli->prepare($query);
stmt->execute();
$stmt->bind_result($r);
while($stmt->fetch())
{
echo $r . "<br>";
}
}
};
J'ai essayé de copier le classe dans la main .fichier php et ça ne fonctionne toujours pas; cependant, j'ai utilisé exactement le même code( la requête, la préparation, l'exécution, bind_result, et de récupérer une partie) dans un externe .fichier php comme à l'intérieur de la main .fichier php et il a travaillé deux fois. Cela me mène à croire que vous n'êtes pas en mesure d'exécuter des requêtes à partir de l'intérieur de la classe ou qu'il existe une autre manière d'agir de la sorte. Quelqu'un pourrait-il me diriger dans la bonne direction?
Grâce
OriginalL'auteur Logan Besecker | 2012-10-19
Vous devez vous connecter pour publier un commentaire.
Passer à la méthode elle-même
Vous devez passer l'objet de base de données pour la méthode, car ils ne sont pas dans le même champ d'application:
et de l'appeler comme
Passer au constructeur
Si votre classe fait beaucoup d'appels de base de données, vous pouvez simplement les faire passer dans le constructeur et l'enregistrer comme une variable privée pour une utilisation ultérieure:
et de l'appeler comme
Les deux méthodes, il est clair que la dépendance de votre classe est un objet mysqli, ce qui est bon pour l'avenir de l'entretien et de la lisibilité.
Fonctions externes ne seront pas en mesure de l'utiliser. Les fonctions d'introduire une nouvelle variable de portée.
vraiment? en quelque sorte j'ai été capable de s'en sortir sans le faire de cette façon dans mes fonctions externes..
OriginalL'auteur kapa
Vous avez besoin pour passer de $mysqli comme un paramètre ou d'utilisation global $mysqli
La simple présentation des options comme c'est une solution viable. Cela dépend de la façon dont l'application est structurée comme à ce qui serait le mieux.
À l'aide de classes et variables globales ensemble n'a pas de sens. Soit écrire normale de la POO ou vous pouvez utiliser la bonne vieille fonctions et vous épargner beaucoup d'ennuis.
OriginalL'auteur Omnikrys