J'essaie de créer un simple CMS personnalisé, mais j'obtiens une erreur:
Avertissement: mysqli_query () s'attend à ce que le paramètre 1 soit MySQLi, null donné dans
Pourquoi est-ce que je reçois cette erreur? Tout mon code est déjà MySQLi et j'utilise deux paramètres, pas un.
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
//check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL:" . mysqli_connect_error();
}
function getPosts() {
$query = mysqli_query($con,"SELECT * FROM Blog");
while($row = mysqli_fetch_array($query))
{
echo "<div class=\"blogsnippet\">";
echo "<h4>" . $row['Title'] . "</h4>" . $row['SubHeading'];
echo "</div>";
}
}
Comme mentionné dans les commentaires, il s'agit d'une question de portée. Plus précisément, $con
n'est pas inclus dans votre fonction getPosts
.
Vous devez passer votre objet de connexion en tant que dépendance, par exemple
function getPosts(mysqli $con) {
// etc
Je recommande également fortement d'arrêter l'exécution si votre connexion échoue. Quelque chose comme ça devrait suffire
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
if (mysqli_connect_errno()) {
throw new Exception(mysqli_connect_error(), mysqli_connect_errno());
}
getPosts($con);
utilisez la portée globale sur votre $ con et placez-la dans votre fonction getPosts ().
function getPosts() {
global $con;
$query = mysqli_query($con,"SELECT * FROM Blog");
while($row = mysqli_fetch_array($query))
{
echo "<div class=\"blogsnippet\">";
echo "<h4>" . $row['Title'] . "</h4>" . $row['SubHeading'];
echo "</div>";
}
}
La fonction getPosts()
semble s’attendre à ce que $con
soit global, mais vous ne le déclarez pas comme tel.
Beaucoup de programmeurs considèrent les variables globales chauves comme une "odeur de code". L'alternative à l'autre bout de l'échelle est de toujours faire passer la ressource de connexion. Partway entre les deux est un appel singleton qui renvoie toujours le même descripteur de ressource.