2010-08-14 4 views
2

Je reçois l'erreur (mysql_fetch_row(): l'argument fourni n'est pas une ressource de résultat MySQL valide dans) pour cette requête. Pourquoi?mysql_fetch_row(): l'argument fourni n'est pas une ressource de résultat MySQL valide dans

<?php 

set_time_limit(0); 
//MySQL globals 
$mysql_server = "***";//change this server for your Drupal installations 
$mysql_user = "***";//Ideally, should be root 
$mysql_pass = "***";//Corresponding password 
$conn = mysql_connect($mysql_server,$mysql_user,$mysql_pass);//MySQL connection string 


$query = "select * from dr_wiwe_old_node WHERE type = 'story'"; 
$noders = mysql_query($query); 
var_dump($noders); 
while ($row = mysql_fetch_row($noders)) { 
$nid = $row[0]; 
$vid = $row[1]; 
$type = $row[2]; 
$title = mysql_real_escape_string($row[3]); 
$uid = $row[4]; 
$status = $row [5]; 
$created = $row[6]; 
$changed = $row[7]; 
$comment = $row[8]; 
$promote = $row[9]; 
$moderate = $row[10]; 
$sticky = $row[11]; 
//Insertion into node 
$query="insert into dr_wiwe_node values('" . $nid . "','" 
    . $vid . "','" . $type . "','','" . $title . "','" . $uid . "','" 
    . $status . "','" . $created . "','" . $changed . "','" . $comment 
    . "','" . $promote . "','" . $moderate . "','" . $sticky . "','0','0')"; 
if (!mysql_query($query)) { 
print $query; 
} 
?> 

Où est l'erreur ou que puis-je changer?

+0

Veuillez noter que les fonctions 'mysql_xxx()' sont obsolètes. Il est recommandé de changer votre code pour utiliser la bibliothèque PDO à la place. – Spudley

Répondre

1

type est un mot réservé dans SQL. Vous aurez besoin de l'enfermer dans backticks dans votre requête pour l'utiliser comme nomchamp:

$query = "select * from dr_wiwe_old_node WHERE `type` = 'story'"; 
+0

hmmmm ... Je l'ai changé, mais l'erreur est toujours là ..... – Lars

+0

BTW: Si je fais la requête dans PHPMYAdmin, cela fonctionne. Si je l'utilise dans un scipt, ce n'est pas le cas. – Lars

+0

Essayez de voir quelle était l'erreur SQL réelle, puis - changez l'appel de votre requête en '$ noders = mysql_query ($ query) ou en trigger_error (mysql_error());' et voyez le message d'erreur qu'il vous donne. – Amber

2

Lorsque vous exécutez une requête, vérifier la valeur de retour de la fonction. Si c'est false alors il y avait une erreur avec votre requête.

$noders = mysql_query($query); 
if ($noders === false) { 
    error_log(mysql_error()); 
} 

Des erreurs peuvent survenir pour diverses raisons, notamment:

  • Vous n'êtes pas connecté au serveur MySQL.
  • Vous n'avez pas sélectionné la bonne base de données avec mysql_select_db(), donc MySQL ne sait pas comment trouver les tables que vous nommez dans votre requête. C'est le cas dans votre exemple de code.
  • Vous avez une erreur dans votre syntaxe SQL.
  • Vous n'avez pas le privilège d'accéder aux tables nommées dans votre requête.
  • etc.
+0

Beaucoup de Merci. Ça fonctionne maintenant. – Lars

+0

Content de vous aider! N'oubliez pas d'augmenter le nombre de personnes qui vous ont aidé sur Stack Overflow et de marquer la réponse la plus utile comme réponse acceptée. –

0

Le problème est que vous recréez une requête au sein de votre boucle d'une requête. Je ne pense pas que vous pouvez le faire sans cloner la connexion ou quelque chose.

1

L'une des raisons de la

mysql_fetch_row(): supplied argument is not a valid MySQL result resource

est due à:

nom d'hôte incorrect sélectionné dans la définition de la db ou la configuration de l'autorisation d'accès à la base de données est incorrecte.

Par exemple, si vous avez accordé '[email protected]' d'accéder à un db

et vous entrez le nom d'hôte explicitement causer des problèmes.

Pour résoudre l'autorisation d'octroi quelque chose comme [email protected]'%'.

Questions connexes