2009-04-28 4 views
38

je reçois l'erreur lorsque vous essayez de lancer ceci:Warning: mysql_fetch_array(): argument fourni est pas un résultat MySQL

<?php 
require_once('includes/DbConnector.php'); 
$connector = new DbConnector(); 
$result = $connector->query('SELECT title,content FROM staff_vacancies ORDER BY ordering LIMIT 0,100'); 
// Get an array containing the results. 
// Loop for each item in that array 
while ($row = $connector->fetchArray($result)){ 

echo $row['title'].'</h3>'; 
echo $row['content']; 
} 
?> 

J'ai un fichier lié: DbConnector.php:

<?php 
//////////////////////////////////////////////////////////////////////////////////////// 
// Class: DbConnector 
// Purpose: Connect to a database, MySQL version 
/////////////////////////////////////////////////////////////////////////////////////// 
require_once 'SystemComponent.php'; 

class DbConnector extends SystemComponent { 

var $theQuery; 
var $link; 

//*** Function: DbConnector, Purpose: Connect to the database *** 
function DbConnector(){ 

    // Load settings from parent class 
    $settings = SystemComponent::getSettings(); 

    // Get the main settings from the array we just loaded 
    $host = $settings['dbhost']; 
    $db = $settings['dbname']; 
    $user = $settings['dbusername']; 
    $pass = $settings['dbpassword']; 

    //the settings 
    $host = 'localhost'; 
    $db = 'xxx'; 
    $user = 'xxx'; 
    $pass = 'xxx'; 

    // Connect to the database 
    $this->link = mysql_connect($host, $user, $pass); 
    mysql_select_db($db); 
    register_shutdown_function(array(&$this, 'close')); 

} 

//*** Function: query, Purpose: Execute a database query *** 
function query($query) { 
    $this->theQuery = $query; 
    return mysql_query($query, $this->link); 
} 

//*** Function: getQuery, Purpose: Returns the last database query, for debugging *** 
function getQuery() { 
    return $this->theQuery; 
} 

//*** Function: getNumRows, Purpose: Return row count, MySQL version *** 
function getNumRows($result) { 
    return mysql_num_rows($result); 
} 

//*** Function: fetchArray, Purpose: Get array of query results *** 
function fetchArray($result) { 
    return mysql_fetch_array($result); 
} 

//*** Function: close, Purpose: Close the connection *** 
function close() { 
    mysql_close($this->link); 
} 


} 
?> 

Est-ce que quelqu'un sait quel est le problème?

+1

Vous ne devriez pas utiliser les fonctions mysql tant que c'est [déconseillé] (http://stackoverflow.com/questions/12859942/why-shouldnt-use-mysql-functions-in-php) – Kaz

+2

[** Merci de ne pas utiliser les fonctions 'mysql_ *' dans le nouveau code **] (http://bit.ly/phpmsql). Ils ne sont plus maintenus [et sont officiellement obsolètes] (http://j.mp/XqV7Lp). Voir la [** boîte rouge **] (http://j.mp/Te9zIL)? En savoir plus sur [* instructions préparées *] (http://j.mp/T9hLWi) à la place, et utiliser [PDO] (http://php.net/pdo) ou [MySQLi] (http://php.net/ mysqli) - [cet article] (http://j.mp/QEx8IB) vous aidera à décider lequel. Si vous choisissez PDO, [voici un bon tutoriel] (http://j.mp/PoWehJ). – esqew

+0

Référence canonique → [mysql \ _fetch \ _ray() s'attend à ce que le paramètre 1 soit resource (ou mysqli \ _result), booléen donné] (http://stackoverflow.com/q/2973202) – mario

Répondre

17

Votre requête doit avoir un problème qui cause que $ result soit une ressource invalide.

Essayez de vérifier mysql_error() après la ligne sur laquelle vous exécutez votre requête.

Edit:

En fait, je modifier votre requête de fonction de classe DBConnector() à quelque chose comme ce qui suit, de sorte qu'une erreur d'identification est lancée quand vous avez une mauvaise requête:

function query($query) { 
    $this->theQuery = $query; 
    $queryId = mysql_query($query,$this->link); 
    if (! $queryId) { 
     throw new Exception(mysql_error().". Query was:\n\n".$query."\n\nError number: ".mysql_errno(); 
    } 
    return $queryId; 
} 
1
// Load settings from parent class 
$settings = SystemComponent::getSettings(); 

// Get the main settings from the array we just loaded 
$host = $settings['dbhost']; 
$db = $settings['dbname']; 
$user = $settings['dbusername']; 
$pass = $settings['dbpassword']; 

//the settings 
$host = 'localhost'; 
$db = 'xxx'; 
$user = 'xxx'; 
$pass = 'xxx'; 

Voulez-vous réaffecter les variables de connexion? Ou était-ce quelques lignes de code stub que vous avez oublié de sortir? Ou juste un exemple pour montrer ce que contient $ settings?

1

Veuillez fournir l'erreur de mysql_error(). Sans cela je ne peux que deviner ... essayez d'échapper à vos noms de domaine?

$result = $connector->query('SELECT `title`,`content` FROM `staff_vacancies` ORDER BY `ordering` LIMIT 0,100'); 
1

Votre requête doit avoir un problème pour que $ result soit une ressource invalide.

Utilisez cette

<?php 
require_once('includes/DbConnector.php'); 
$connector = new DbConnector(); 
$result = $connector->query('SELECT title,content FROM staff_vacancies ORDER BY ordering LIMIT 0,100'); 
// Get an array containing the results. 
// Loop for each item in that array 

if($result){ 
while ($row = $connector->fetchArray($result)){ 

echo $row['title'].'</h3>'; 
echo $row['content']; 
} 
} 
?> 
1

Je trouve cela dans un poste, me résolu mon problème. Slds.

Ouais, réponse est simple, la requête utilisée est pas un vrai résultat car il est une requête à l'intérieur d'un getRow pour ainsi dire .. Voici le correctif: Trouver toutes les lignes qui ressemblent à ceci:

mysql_fetch_array(mysql_query("...snip...";-)); 

Et il suffit d'ajouter un « @ » devant elle il ressemble à ceci:

@mysql_fetch_array(mysql_query("...snip...";-)); 

Ensuite, faites la même chose pour les lignes suivantes .. code:

mysql_num_rows(mysql_query("...snip...";-)); 

Effectuez les mêmes étapes que ci-dessus en ajoutant le « @ » à elle il ressemble à ceci:

@mysql_num_rows(mysql_query("...snip...";-)); 

Tout cela est-il dit « Tout en faisant xxx dans les yyy » Sinon, il est mort à cause de valeur de résultat manquante. C'est une chose PHP ..

Fonctionne comme un charme, m'a pris 5 minutes pour déchirer le code entier et tout le claquer dans Modernbill, Partage la même base de données et fonctionne parfaitement pour moi.

2

Cette erreur signifie que votre requête a échoué.mysql_query() renvoie la valeur false si une erreur s'est produite, vous transmettez alors false à mysql_fetch_array() qui déclenche le message d'erreur.

Votre requête peut être défectueuse en raison d'une table ou d'un champ manquant/erroné. Pour voir l'erreur détaillée, imprimez le résultat de mysql_error().

La bibliothèque mysql_* est obsolète. Il est recommandé de mettre à niveau vers MySQLi ou PDO.

Questions connexes