[RESOLU] ORDER BY Rand()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] ORDER BY Rand()

Re: ORDER BY Rand()

par sirakawa » 05 juil. 2013, 08:34

Je croyais que les backquotes servaient aussi à protéger les requêtes.

Re: ORDER BY Rand()

par moogli » 04 juil. 2013, 21:20

:mrgreen: :mrgreen:

Re: ORDER BY Rand()

par Mazarini » 04 juil. 2013, 10:53

J'ai parlé de ca uniquement pour expliquer pour expliquer que certaines requêtes pouvaient encore fonctionner.

Personnellement, je ne prends pas de risque, j'évite les mots réservés (quand je les connais), les blancs, lettres accentuées... Je n'ai jamais utilisé les back quote. J'ai assez de problème pour me compliquer la vie #-o

Re: ORDER BY Rand()

par moogli » 04 juil. 2013, 10:41

comme tu le vois dans le code coloré primary est un mot clef et c'est normale que tu ne puisse pas (essai de dire qu'un chien est une voiture et personne ne va te comprendre :) ).
mais ça tu le sais déja.

Le truc c'est que la plus part des éditeur de SGBD ont prévue une syntaxe pour "échapper" les noms de tables / champs histoire d'éviter les erreurs.
c'est la syntaxe qu'indique Mazarini avec les "back quote" => ` (alt Gr + 7 sur un clavier "normal en france :mrgreen: ")

tu coup
CREATE TABLE `primary` (id int, mot text);
doit passer pour la création, et s'il a utiliser un outil pour générer le code SQL (genre modélisation de la base merise / uml et le soft génère le code) il y a de grande chance que le code généré utilise les back quote ;)


@+

Re: ORDER BY Rand()

par sirakawa » 04 juil. 2013, 10:14

Mazarini,
Moi je ne peux même pas utiliser :
create table primary (id int, mot text);
sans avoir une erreur de syntaxe qui disparait avec:
create table primari (id int, mot text);
Peut-être qu'en renommant brutalement les tables....

Re: ORDER BY Rand()

par Mazarini » 04 juil. 2013, 08:32

Bonjour,

`primary` comme ca, marche surement. Ca peut expliquer que les autres accès marche.
Reste qu'utiliser des mots réservés n'est généralement pas une bonne idée à cause des problèmes potentiel.

Re: ORDER BY Rand()

par Stalker » 04 juil. 2013, 08:04

Ha bien je ne l'avais pas vu sous cet angle là... Ca m'étonne quand même que toutes les autres requetes dans la table "primary" marchent à merveille, mais bon, je vais tenter de modifier ça

Re: ORDER BY Rand()

par moogli » 03 juil. 2013, 23:39

Salut,

C'est pourtant simple primary est un mot clef SQL du coup il ne comprend pas ce qu'il fait après le from.

C'est toujours une très mauvais idée que d'utiliser des mots clefs comme nom de champs, table, schéma etc.
La preuve est faire par ton code.

Un bon moyen pour l'éviter ?
Utiliser des mots français de France et tu ne devrais pas avoir se problème (primaire n'étant pas un mot clef XD).


@+

ORDER BY Rand()

par Stalker » 03 juil. 2013, 12:10

Bonjour.

Sur ma page d'accueil, je souhaites donner un aperçu de mon site web. Pour cela je choisis une entré au hasard dans la base de données et j'affiche.
$req_rand = 	mysql_query("SELECT star_name FROM etoile ORDER BY rand() LIMIT 1");
while ($row = mysql_fetch_array($req_rand))
	{ extract($row);
echo"Un système extrasolaire au hasard: $star_name";
Seulement voila, hier j'ai fait migrer mon site chez un nouvel hébergeur. J'en ai profité pour changer quelques trucs (comme le nom des tables) dans la base de données. J'ai modifié en conséquence mon code PHP/MySQL partout sur le site, et ça marche très bien, sauf sur ce petit module de la page d'accueil, qui ne montre rien! Voici mon code, en commentaire l'ancien code.
$req_rand = 	mysql_query("SELECT star_name FROM primary ORDER BY rand() LIMIT 1");
// $req_rand = 	mysql_query("SELECT star_name FROM etoile ORDER BY rand() LIMIT 1");
while ($row = mysql_fetch_array($req_rand))
	{ extract($row);
echo"Un système extrasolaire au hasard: $star_name";
Je vais sur PHPmyadmin pour vérifier la requête. (SELECT star_name FROM primary ORDER BY rand() LIMIT 1)

Ce la me donne l'erreur suivante:
#1064 - 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 'primary ORDER BY rand_ind LIMIT 1' at line 1
J'ai beau chercher, je ne trouve pas ce qui coince et pourquoi ça ne coince pas sur l'ancien hébergeur. Pouvez vous m'aider?

Merci d'avance.