2011-05-23 5 views
1

en double possible:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectdonnées d'impression PHP mysql via json_encode()

I ont des bases de données de remorquage mysql. le premier emplacement de base de données est latin1_swedish_ci et la seconde base de données est utf_unicode_ci. J'essaie de lire les bases de données avec le code php ci-dessous.

<?php 
mysql_connect("localhost","admin","***"); 
mysql_select_db("MyDB"); 
$sql=mysql_query("select * from menu where avail=1"); 
while($row=mysql_fetch_assoc($sql)) 
$output[]=$row; 
print(json_encode($output)); 
mysql_close(); 
?> 

Quand je suis runing ce code via mon serveur php la première base de données l'un avec latin1_swedish_ci est readed mais quand je suis en train de lire le second affiche les messages suivants:

"Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in...." 
"Notice: Undefined variable: output in...." 

J'ai essayé de donner mysql_query ("SET NAMES utf8;"); dans mon code, mais il n'a pas travaillé Quelqu'un peut-il me dire ce qui ne va pas ici?

+1

* Remarque: Variable indéfinie: sortie en .... * ... pourquoi avez-vous censuré le message d'erreur? –

+3

Peu importe dans ce cas; c'est assez évident pourquoi cet avis a été lancé. – ThiefMaster

+0

Si $ sql est un booléen (faux), cela signifie qu'il y avait une erreur SQL. Ajoutez 'echo mysql_error()' après avoir exécuté la requête pour voir ce qui s'est mal passé. –

Répondre

-1

Essayez mysql_fetch_array au lieu de mysql_fetch_assoc

définissent également $output avant de l'utiliser:

$output = array(); 
while($row=mysql_fetch_array($sql)) 
    $output[]=$row; 
+0

@downvoter, soin d'expliquer? – Neal

+0

Oui: 'mysql_fetch_assoc()' retourne un tableau associatif tandis que 'mysql_fetch_array()' retourne un tableau avec des index associatifs et numériques. Donc, non seulement il gonfle son json mais ajoute également des données dont il n'a probablement pas besoin. – ThiefMaster

+0

c'est la même chose – George32x

1

Tout d'abord, vous devez ajouter $output = array(); avant que la boucle.

Ensuite, réparez votre requête pour qu'elle n'échoue pas. Si mysql_query() renvoie un booléen (false), cela signifie que la requête a échoué.

Vous pouvez ajouter une construction laide pour voir pourquoi il a échoué:

$sql=mysql_query("select * from menu where avail=1") or die(mysql_error()); 
1

Vous avez eu une erreur dans votre requête. L'erreur a causé cette ligne:

$sql=mysql_query("select * from menu where avail=1"); 

pour revenir false. Cette erreur est transmise à la ligne suivante:

while($row=mysql_fetch_assoc($sql)) 

a déclenché la première erreur. Le temps a été sauté, donc cette ligne n'a jamais été exécutée:

$output[]=$row; 

D'où le deuxième avertissement.

Ajouter un mysql_error() après votre mysql_ * Des déclarations comme ce et faire une habitude :

mysql_connect("localhost","admin","***") or die(mysql_error()); 
. 
. 
. 
mysql_select_db("MyDB") or die(mysql_error()); 
. 
. 
. 
$sql=mysql_query("select * from menu where avail=1") or die(mysql_error()); 

Ces die(mysql_error()) l'instruction se termine le script après avoir affiché le message d'erreur. Bien qu'il puisse ou ne soit pas nécessaire de faire le script mourir sur les erreurs mysql, la plupart des gens le garder comme ça. Au lieu d'utiliser l'instruction die, vous pouvez vérifier la valeur de retour à la place et mettre fin au script si nécessaire.

L'erreur dans votre cas semble être à la ligne de sélection de la base de données.Peut être le nom de base de données que vous spécifiez dans mysql_select_db était incorrect ou peut-être vous n'avez pas l'autorisation de lire cette base de données (établir une connexion avec un nom d'utilisateur/mot de passe donné ne signifie pas que cet utilisateur peut lire toutes les bases de données). Poster le message d'erreur (à nouveau).

+0

il prinds "Aucune base de données sélectionnée" – George32x

+0

J'ai édité ma réponse. Vous avez peut-être fait une faute de frappe dans votre instruction 'mysql_select_db()' ou vous n'avez pas les permissions pour lire la base de données. Il pourrait y avoir d'autres raisons inhabituelles. –