Drupal et SQL Free

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je viens de tenter d'installer Drupal sur FREE.
J'ai bien ma base de créée, lorsque j'execute l'enregistrement du premier user, il me dit que je ne peux acceder aux tables (ACCESS denied for user ...)
Suivit d'un "query: LOCK TABLES sequences WRITE in /var/www/free.fr/9/f/XXXXXXX/includes/database.mysql.inc on line 66."

Quelle solution pour palier ce soucis ?

Merci de votre aide.

Bonjour, j'ai le problème de LOCK TABLES sur free. J'ai bien suivi tous les messages de ce post et d'autres, mais EN CLAIR, je n'ai pas compris ce qu'il fallait faire.

Je comprends bien qu'in ne peut pas donner toujours les mêmes réponses aux mêmes questions, mais là, il y a beaucoup de balades pour arriver à ... rien

Merci

Capitaine Olivier

Dans le fichier database.mysql.inc, change ta fonction db_next_id par

<?php
 
function db_next_id($name) {
 
$name = db_prefix_tables($name);
 
//db_query('LOCK TABLES {sequences} WRITE');
 
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
 
db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
 
//db_query('UNLOCK TABLES');

 
return $id;
}
?>

Pour enlever les querys de type LOCK que Free aime pas.

Bon ça marche mais...

J'ai fait la modification mais j'ai toujours un message d'erreur

user error: Access denied for user 'mairie.stblimont'@'212.27.63.151' to database 'mairie_stblimont'
query: LOCK TABLES sequences WRITE in var/www/free.fr/2/a/mairie.stblimont/includes/database.mysql.inc on line 66.

warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/2/a/mairie.stblimont/includes/common.inc:384) in /var/www/free.fr/2/a/mairie.stblimont/includes/common.inc on line 192.

Quand je reviens à la page HOME, je m'aperçois qu'il a ajouté plusieurs fois le commentaire que j'essayais de placer...

Capitaine Olivier

Je n'arrête pas de comparer ton message précédent avec mon fichier mais rien n'y fait...
Je ne sais plus quoi faire

Voici le fichier

function db_next_id($name) {
$name = db_prefix_tables($name);
db_query('LOCK TABLES {sequences} WRITE');
$id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 1;
db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
db_query('UNLOCK TABLES');

return $id;

}

Capitaine Olivier

Le pb c que si tu regardes bien le code que je t'ai file (en plus en couleur ;) ), tu veras que les 2 lignes faisant des requetes LOCK et UNLOCK sont [b]COMMENTEES[/b].

La je sais pas comment je peux faire plus clair... :D

Toutes mes excuses pour mon message précédent.
En effet, les // n'y sont plus (les fameuses lignes COMMENTEES).

A les comparer (en tenant compte de cette petite erreur), les fonctions sont bien identiques en tous points mais cela ne résoud pas mon petit problème.
encore désolé

Capitaine Olivier

Tu veux dire que tu as tjs le meme message d'erreur que lors de ton precedent message. Parce ce message d'erreur vient du fait que tu n'as pas commente les fonctions de LOCK.
Si tu les as bien commente, tu dois avoir un nouveau message. Tu pourrais nous le mettre ?

Je peux bien écrire du contenu, mais dès que je clique sur Soumettre, j'ai le message

user error: Access denied for user 'mairie.stblimont'@'212.27.63.151' to database 'mairie_stblimont'
query: LOCK TABLES sequences WRITE in /var/www/free.fr/2/a/mairie.stblimont/includes/database.mysql.inc on line 66.

warning: Cannot modify header information - headers already sent by (output started at /var/www/free.fr/2/a/mairie.stblimont/includes/common.inc:384) in /var/www/free.fr/2/a/mairie.stblimont/includes/common.inc on line 192.

Si je reviens à la racine du site, le contenu apparaît !!
C'est toujours comme ça.

Capitaine Olivier

C'est moi qui ai dû merdé...

Ben oui, je viens de refaire une install complète sur un autre compte chez FREE et en faisant la manipulation que tu proposes, ça marche impecc.

Merci pour tout

Capitaine Olivier

Ca fonctionne bien en mettant en commentaire. Mais j'ai une question :
Quelles sont les implications ? A quoi servaient les lock et qu'est-ce qu'il se passe si on les supprime. MYSQL ne protège pas les tables ?

le lock, si je me souviens bien, évite que deux personnes ne crée un contenu avec le même numéro dans la base de donnée.
En gros quand tu crées un nouveau node, la base de donnée renvoie à drupal le numéro nid (c'est un index) que devras posséder le node que tu crées. Donc si deux personnes tentent de créer un node en même temps, alors il peut se trouver que deux node possèdent le même nid. Le lock permet d'éviter cette situation. Malgré tout cette situation est rare sur un site avec un faible trafic.

Petite mise a jour car apparement j'ai oublie des morceaux.
Le plus radical est de carrement commenter le contenu des fonction db_lock et db_unlock :

<?php
/<strong>
 *
Lock a table.
 */
function
db_lock_table($table) {
 
//db_query('LOCK TABLES {'. db_escape_table($table) .'} WRITE');
}

/</
strong>
 *
Unlock all locked tables.
 */
function
db_unlock_tables() {
 
//db_query('UNLOCK TABLES');
}
?>

La c radical ;)