2017-05-26 2 views
0

Je souhaite réinitialiser mes identifiants de 1 à un maximum car, étant donné que je dois mettre plusieurs fois à jour une table, je risque d'avoir des ID supérieurs à la valeur maximale de la colonne ID .
Par exemple, j'obtiens parfois l'ID 2842719402837 trop grand pour être entré dans ma colonne ID (INTEGER, longueur 11).
J'utilise cette requête pour réinitialiser les ids de 1 au maximum un:MySQL - Erreur de réinitialisation de l'ID de 0 à

SET @num := 0; 
UPDATE riepilogo SET id = @num := (@num+1); 
ALTER TABLE riepilogo AUTO_INCREMENT =1; 

Vous pouvez trouver ici la réponse où je suis arrivé le SQL: Click Here

Bien qu'il fonctionne parfaitement sur phpMyAdmin, ce n'est pas travailler avec PHP.
Je suis en utilisant ce code pour exécuter la requête:

$sql = "SET @num := 0; 
     UPDATE riepilogo SET id = @num := (@num+1); 
     ALTER TABLE riepilogo AUTO_INCREMENT =1;"; 
$result = $conn->query($sql); 
if(!$result) die("MySQL Error : ".$sql."<br>Error : ".$conn->error); 

Naturellement je l'ai déjà mis la variable $conn, mais je me fais l'erreur suivante:

Erreur MySQL: SET @num : = 0; MISE À JOUR riepilogo SET id = @num: = (@ num + 1); ALTER TABLE riepilogo AUTO_INCREMENT = 1;
Erreur: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MariaDB pour la bonne syntaxe à utiliser près de 'UPDATE riepilogo SET id = @num: = (@ num + 1); ALTER TABLE riepilogo AUTO_ 'à la ligne 2

Donc, cette requête fonctionne avec la console SQL de phpMyAdmin, mais elle ne l'exécute pas avec PHP.
Qu'est-ce que je fais de mal? Merci beaucoup!

+0

Pourquoi ne vous utilisez SERIAL DATATYPE? Int avec autoincrement est limite trop basse. – calexandre

+0

Quel outil php db utilisez-vous? Je crois que pour PDO vous ne pouvez pas faire plusieurs phrases, sauf si vous faites une première mise en place d'abord https://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd – Lixus

+0

Pour Facilitez-le - déplacez ce code vers une procédure stockée et appelez simplement la procédure. –

Répondre

0

Vous pouvez utiliser BIGINT datatyppe au lieu de l'INT

Selon vos besoins en utilisant ce code ci-dessous pour réinitialiser AUTO_INCREMENT,

$sql = "ALTER TABLE riepilogo AUTO_INCREMENT = 1"; 
$result = $conn->query($sql); 
if(!$result) die("MySQL Error : ".$sql."<br>Error : ".$conn->error); 
+0

L'utilisation de BIGINT au lieu de INT augmentera simplement la durée de ma table, mais cela ne résoudra pas mon problème. Et votre requête ne fonctionne pas, car elle définit simplement AUTO_INCREMENT mais pas 1. – DamiToma