probleme boucle... grosse boucle... voir probleme à la fin - PHP - Programmation
Marsh Posté le 02-03-2006 à 13:45:24
essaie mysql_fetch_array
Marsh Posté le 02-03-2006 à 14:00:44
et comment tu initialises $truc?
parce que l'erreur est quand même assez parlante ...
Marsh Posté le 02-03-2006 à 14:43:24
et le plus simple ça serait de faire ça sans boucle avec une seul requête
INSERT INTO monautretable SELECT ... FROM matable
voir http://dev.mysql.com/doc/refman/5. [...] elect.html
Marsh Posté le 02-03-2006 à 14:57:08
Code :
|
et tu utilises $truc avec mysql_fetch_row...
utilise un autre variable.
et au lieu de faire $champ = $row['champ'] essaye la fonction http://fr.php.net/extract tu gagneras 7 lignes
Marsh Posté le 02-03-2006 à 14:59:30
anapajari > là l'erreur elle lui dit que ce qu'il passe en argument n'est pas valide. Donc c'est que la réponse de sa requête n'est pas valide.
déjà il n'y a qu'un argument à mysql_fetch_row()
ensuite avec fetch row ca te renvoit un tableau et tu dois écrire $row[1]
pour associé avec le nom de ton champ c fetch_array ou fetch_assoc.
Marsh Posté le 02-03-2006 à 15:15:27
newneo2001 a écrit : Donc c'est que la réponse de sa requête n'est pas valide. |
si la requete n'était pas valide le script s'arreterait avec le die, c'est $truc qui n'est pas valide après la première itération du while.
sinon tu as raison pour le reste (fetch_array)
Marsh Posté le 02-03-2006 à 15:18:54
avec le SELECT INSERT il serait quand même moins emmerdé, et c'est autrement plus rapide qu'une boucle dégueulasse de requêtes..
Marsh Posté le 02-03-2006 à 15:19:44
oui j'avais pas vu le die.
Marsh Posté le 02-03-2006 à 15:20:24
Sh@rdar a écrit : avec le SELECT INSERT il serait quand même moins emmerdé, et c'est autrement plus rapide qu'une boucle dégueulasse de requêtes.. |
on est bien d'accord, mais la plupart des hebergeurs sont encore à la version 3 de mysql
Marsh Posté le 02-03-2006 à 15:22:20
soju a écrit : on est bien d'accord, mais la plupart des hebergeurs sont encore à la version 3 de mysql |
ça marche avec une version 3, c'est même la base pour copier une table
Marsh Posté le 02-03-2006 à 15:27:37
Sh@rdar a écrit : ça marche avec une version 3, c'est même la base pour copier une table |
oups j'aurais mieux fait de me taire
Marsh Posté le 02-03-2006 à 18:08:58
anapajari a écrit : et comment tu initialises $truc? |
Citation : $origine = " SELECT * FROM `moteur` WHERE `description` LIKE '%$machin%' OR `match` LIKE '%$machin%' OR `motcle` LIKE '%$machin%' "; |
voila...
Marsh Posté le 02-03-2006 à 18:13:25
OH LA LA OH LALA
Bon je me vois dans l'obligation de donner qques explications
Pour newneo2001:
dans cette requete :
$origine = " SELECT * FROM `moteur` WHERE .......
les reponses existent
pour Sh@rdar
(avec le SELECT INSERT ...)
aurais tu un exemple d'utilisation ?
SINON BEN...
l'erreur ne vous dit toujours rien ?
Marsh Posté le 02-03-2006 à 18:16:07
erwan83 > $origine = " SELECT * FROM `moteur` WHERE .......
les reponses existent
oui elles existent mais elle ne sont pas associées à un tableau comme tu le demandes apres. Tu as qu'à remplacer ton fetch_row déjà
Marsh Posté le 02-03-2006 à 18:17:10
bon je vais remplacer le fetch row par fetch array alors
Vroummmmmmm
je vous tiens au courant
Marsh Posté le 02-03-2006 à 18:22:25
avec fetch array ca donne ca :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource .....
Marsh Posté le 02-03-2006 à 18:28:52
le INSERT SELECT c'est pas bien compliqué
c'est jamais qu'un SELECT standard, sauf que les lignes retournées seront insérées dans l'autre table
l'exemple le plus simple
INSERT INTO Table2 (Id,bidule) SELECT Id,Truc FROM Table1
sachant que sur la partie select tu peux faire tout ce que tu veux comme un select normal (jointures, conditions etc)
Marsh Posté le 02-03-2006 à 18:31:21
bizarre car si le retour n'est pas bon c'est que ca vient de ta requete mais si ca venait de ta requete ca serait bloqué apres le die().
Il faudrait revoir un peu ton code et ce qu'il y a tes tables
Mais si c'est pour recopier une DB alros regarde du coté de SELECT INSERT comme te l'as dit Sh@rdar
Marsh Posté le 02-03-2006 à 18:32:25
ReplyMarsh Posté le 02-03-2006 à 18:44:22
Le code
Citation : $sql = mysql_query(" SELECT * FROM `moteur` WHERE `description` LIKE '%$machin%' OR `match` LIKE '%$machin%' OR `motcle` LIKE '%$machin%' INSERT INTO `$machin` " ) or die("xxx".mysql_error() ); |
L'erreur
Citation : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO `cartoon`' at line 1... |
Heu...
Marsh Posté le 02-03-2006 à 19:02:56
pas le bon ordre (ok on s'est confusés un peu mais y'a une doc hein )
INSERT INTO .. SELECT
Marsh Posté le 02-03-2006 à 19:04:19
Arghhhh (rxpression d'un cri rauqye et gloque)
Justement m'en suis rendu compte.
Suis entrain de retablir tout ça
Marsh Posté le 02-03-2006 à 19:35:24
J'en suis où ?
le code
Citation : $sql = mysql_query(" INSERT INTO `$machin` (`url` , `description` , `motcle`) SELECT (`url` , `description` , `motcle`) FROM `moteur` WHERE blablabla" ) or die("xxx".mysql_error() ); |
l'erreur
Citation : Operand should contain 1 column(s) |
explication de la doc
Citation : Message = "Operand should contain 1 column(s)" |
Marsh Posté le 02-03-2006 à 20:04:21
Si tu crées la table juste avant d'inserer tes lignes, tu as la solution du CREATE TABLE ... SELECT
Marsh Posté le 02-03-2006 à 20:07:42
Heu... mais si qu'elqu'un pouvait m'expliquer le pourquoi de l'erreur...
pourquoi in ne veut pas plus d'une colonne et ou se trouve le probleme ?
J'y suis presque mais je patine à vide
Marsh Posté le 02-03-2006 à 22:03:08
bon, alors copier coller du vrai code plus structure de la base
ton select il retourne quelque chose au moins ?
Marsh Posté le 02-03-2006 à 22:05:40
Sh@rdar a écrit : bon, alors copier coller du vrai code plus structure de la base :o |
ben oui... encore heureux
Marsh Posté le 03-03-2006 à 09:43:43
c'est dans ta requete l'erreur, il ne faut pas de parenthèses autour des champs de ton select:
Code :
|
Marsh Posté le 05-03-2006 à 21:53:54
ReplyMarsh Posté le 05-03-2006 à 22:01:10
Reply
Marsh Posté le 02-03-2006 à 01:42:40
voila je fais une boucle pour rechercher des enregistrements que j'appelle $machin, ensuite je cree une table du nom de $machin puis je colle tous les enregistrements dans cette nouvelle table or ca plante
Ce fichier est inclus dans un autre qui cherche la variable $machin
<?
echo $machin;
$sql = mysql_query(" CREATE TABLE `basededonnees`.`$machin` (`date` timestamp NOT NULL ,`insertion` varchar( 20 ) NOT NULL default '',`type` varchar( 25 ) NOT NULL default '',`motcle` varchar( 255 ) NOT NULL default '',`description` varchar( 255 ) NOT NULL default '',`match` varchar( 255 ) NOT NULL default '',`truc` smallint( 2 ) NOT NULL default '0',`url` varchar( 250 ) NOT NULL default '',UNIQUE KEY `url` ( `url` ) ) ENGINE = MYISAM DEFAULT CHARSET = utf8 " ) or die("yyy".mysql_error() );
{ // SELECTION ORIGINE
$origine = " SELECT * FROM `moteur` WHERE `description` LIKE '%$machin%' OR `match` LIKE '%$machin%' OR `motcle` LIKE '%$machin%' ";
$truc = mysql_query($origine,$link) or die("xxx".mysql_error() );
while($row = mysql_fetch_row($truc)) // ICI CA PLANTE
{
$date = $row["date"];
echo $date;
$insertion = $row["insertion"];
$type = $row["type"];
$motcle=$row["motcle"];
$description = $row["description"];
$match = $row["match"];
$truc = $row["truc"];
$url = $row["url"];
$sql = mysql_query("INSERT INTO `$machin` (`date` , `insertion` , `type` , `motcle` , `description`, `match`, `truc` , `url`) VALUES ( '$date', '$insertion', '$type', '$motcle', '$description', '$match', '$truc', '$url')" );
}
}
?>
Voici le message d'erreur :
cartoon
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /var/www/sdb/3/8/HOST/TRANSFERT.php on line 8
Je sèche là...
Pouvez m'aider ?
Merci
Message édité par erwan83 le 02-03-2006 à 19:37:24
---------------
http://www.ypikay.com