Mysql - errore 1054 - "Unknown column 'id_stato' in 'field list'"

di il
3 risposte

Mysql - errore 1054 - "Unknown column 'id_stato' in 'field list'"

Buongiornoi a tutti e grazie per la pazienza

Sto sviluppando una web application con Angular in Frntend e Nodejs in Backend. Utilizzo MySql come db.
Sono abbastanza avanti nello sviluppo (per la Parrocchia e aziende non profit), ma improvvisamente mi si è presentato un problema effettuando la lettura della tabella users.
Eseguendo il codice, viene effettuato dal sistema, una modifica ai campi nella select e precistamente

Select Corretta che dovrebbe essere eseguita
"SELECT `id`, `cognome`, `nome`, `idStato`, `username`, `password`, `email`, `idRuolo`, `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` 
FROM `users` AS `users` 
WHERE `users`.`username` = 'pincopallo' LIMIT 1;",
Select Errata che viene creata da Mysql
"SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` 
FROM `users` AS `users` 
WHERE `users`.`username` = 'pincopallo' LIMIT 1;",
impropriamente viene modificato parte del codice in corrispondenza ai campi foreign key
`id_stato` AS `idStato`, 
 `id_ruolo` AS `idRuolo`,
 `id_ruolo__day` AS `idRuolo_Day`
la struttura della tabella è così codificata:
CREATE TABLE `users` (
`id` int(4) NOT NULL,
`cognome` varchar(32) DEFAULT NULL,
`nome` varchar(32) DEFAULT NULL,
`photo` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '0.jpg',
`idStato` int(1) DEFAULT '0',
`tipoacc` int(1) NOT NULL DEFAULT '0' COMMENT 'tipoacc = 0 acc. provvisoria senza foto\r\ntipoacc = 1 acc. definitiva con upload foto\r\n\r\n',
`username` varchar(32) DEFAULT NULL,
`password` varchar(100) DEFAULT NULL,
`email` varchar(40) DEFAULT NULL,
`idRuolo` int(2) NOT NULL DEFAULT '0',
`idRuolo_Day` int(2) NOT NULL DEFAULT '0',
`idruoloweb` int(2) NOT NULL DEFAULT '0' COMMENT 'tabella T_ruolo_web',
`noteUtente` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`eseguitaAbilitazione` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'N',
`remember_token` varchar(100) DEFAULT NULL,
`email_verified_at` timestamp NULL DEFAULT NULL,
`key_utenti_operation` int(4) DEFAULT '0',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
e gli indici
--
-- Limiti per la tabella `users`
--
ALTER TABLE `users`
  ADD CONSTRAINT `users_ibfk_2` FOREIGN KEY (`idStato`) REFERENCES `t_stato_utentes` (`id`),
  ADD CONSTRAINT `users_ibfk_3` FOREIGN KEY (`idRuolo`) REFERENCES `t_ruolos` (`id`),
  ADD CONSTRAINT `users_ibfk_4` FOREIGN KEY (`idRuolo_Day`) REFERENCES `t_ruolo_days` (`id`);
COMMIT;
i campi
  `id_stato`  - `id_ruolo` e   id_ruolo__day`  non esistono e non capisco perchè venga generata la stringa  con la parola AS                
`id_stato` AS `idStato`, 
 `id_ruolo` AS `idRuolo`,
 `id_ruolo__day` AS `idRuolo_Day`
La cosa è davvero strana perchè fino a qualche giorno fà procedevo regolarmente allo sviluppo della web application e la query veniva generata senza problemi. In Mysql non ricordo di aver fatto modifiche di nessun genere e pertanto la cosa mi ha davvero sconcertato.

Utilizzo xampp control panel v3.2.4

utilizzo Mysql alla versione: Versione del server: 8.0.18 - MySQL Community Server - GPL

Ho provatao a creare un nuovo database minutando la tabella Users e le correlate (senza fare import), ma il risultato non cambia.

Come posso risolvere il problema ?
Grazie

Moreno

3 Risposte

  • Re: Mysql - errore 1054 - "Unknown column 'id_stato' in 'field list'"

    "Select Errata che viene creata da Mysql" , in che senso viene creata?
  • Re: Mysql - errore 1054 - "Unknown column 'id_stato' in 'field list'"

    Grazie surfenet per l'attenzione

    Sicuramente ho usato una forma impropria nella descrizione del problema.

    nel middleware che effettua una verifica dei dati inseriti a form esegue il doppio controllo sulle credenziali inserite effettuando prima una lettura per verificare se esistono già username presenti sulla tabella e poi per email.
    il codice è il seguente:
    checkDuplicateUsernameOrEmail = (req, res, next) => {
    
        console.log('checkDuplicateUsernameOrEmail - inizio');
      // Username
      
      User.findOne({
        where: {
          username: req.body.username
        }
      }).then (user => {
        if (user) {
          res.status(400).send({
            message: "Errore! Username già utilizzata - Inserimento non possibile"
          });
          return;
        }
    
        // Email
        User.findOne({
          where: {
            email: req.body.email
          }
        }).then(user => {
          if (user) {
            res.status(400).send({
              message: "Errore! email già utilizzata - Inserimento non possibile"
            });
            return;
          }
    
          next();
        });
      });
    };
    
    checkEmailandpassword = (req, res, next) => {
    
      console.log('checkEmailandpassword - inizio');
    
      // Email
      User.findOne({
        where: {
          email: req.body.email
        }
      }).then(user => {
        if (!user) {
          res.status(400).send({
            message: "Errore! email inesistente - cambio password non possibile"
          });
          return;
        }
    
        next();
      });
    
    };
    
    console.log('checkDuplicateUsernameOrEmail - fine - controlli ok');
    
    const verifySignUp = {
      checkDuplicateUsernameOrEmail: checkDuplicateUsernameOrEmail,
      checkEmailandpassword: checkEmailandpassword
    };
    
    module.exports = verifySignUp;
    
    quindo faccio l'affermazione "Select Errata che viene creata da Mysql" mi riferisco al fatto che viene effettuata la select sul record con where prima con username e poi con email senza impostare il costrutto "select * from users where ...." ma bensi
    utilizzando il formalismo
    User.findOne({
        where: {
          username: req.body.username
        }
    quindi User.findOne "genera" il codice sql
    sql: "SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `users` AS `users` WHERE `users`.`username` = 'misonsan' LIMIT 1;",
    in cui viene evidenziato l'errore 1054
     code: 'ER_BAD_FIELD_ERROR',
        errno: 1054,
        sqlState: '42S22',
        sqlMessage: "Unknown column 'id_stato' in 'field list'",
        sql: "SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `users` AS `users` WHERE `users`.`username` = 'misonsan' LIMIT 1;",
        parameters: undefined
      },
      original: Error: Unknown column 'id_stato' in 'field list'
    in cui viene creato in maniera errata un campo `id_stato` AS `idStato` in cui id_stato NON ESITE da nessuna parte, ma lui lo crea lo stesso.

    ecco a cosa mi riferivo quando ho scritto "Select Errata che viene creata da Mysql"

    la strsql che dovrebbe essere correttamente eseguita dovrebbe essere
    "SELECT `id`, `cognome`, `nome`, `idStato`, `username`, `password`, `email`, `idRuolo`, `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` 
    FROM `users` AS `users` 
    WHERE `users`.`username` = 'pincopallo' LIMIT 1;",
    mentre genera questa stringa sql errata
    "SELECT `id`, `cognome`, `nome`, `id_stato` AS `idStato`, `username`, `password`, `email`, `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` 
    FROM `users` AS `users` 
    WHERE `users`.`username` = 'misonsan' LIMIT 1;",
    il problema sta nella scrittura per i campi idStato, idRuolo e idRuolo_Day della forma errata
    `id_stato` AS `idStato`,  `id_ruolo` AS `idRuolo`, `id_ruolo__day` AS `idRuolo_Day`
    anziche
     `idStato`, `idRuolo`,  `idRuolo_Day`
    Spero di aver chiarito meglio il senso del problema.

    I campi `idStato`, `idRuolo`, `idRuolo_Day` sono i campi foreign key con le tabelle correlate.

    grazie

    Moreno
  • Re: Mysql - errore 1054 - "Unknown column 'id_stato' in 'field list'"

    Ciao surfenet
    Ti aggiorno sul problema.
    Ho cercato in internet e ho visto che forse un parametro nella definizione del Model poteva risolvere il problema.

    Ho inserito nelle classi model anche il parametro underscored: 0

    ripropongo le classe user aggiornata
    module.exports = (sequelize, Sequelize) => {
        const User = sequelize.define("users", {
          id:{
                // Sequelize module has INTEGER Data_Type.
              type:Sequelize.INTEGER,
     
              // To increment user_id automatically.
              autoIncrement:true,
        
              // user_id can not be null.
              allowNull:false,
        
              // For uniquely identify user.
              primaryKey:true
              
          },
          cognome: {
            type: Sequelize.STRING
          },
          nome: {
            type: Sequelize.STRING
          },
          idStato: {
            type: Sequelize.INTEGER
          },
          username: {
            type: Sequelize.STRING
          },
          password: {
            type: Sequelize.STRING
          },      
          email: {
            type: Sequelize.STRING
          },
          idRuolo: {
            type: Sequelize.INTEGER
          },
          idRuolo_Day: {
            type: Sequelize.INTEGER
          },
          noteutente: {
            type: Sequelize.STRING
          },
          photo: {
            type: Sequelize.STRING
          },
          remember_token: {
            type: Sequelize.STRING
          },
          email_verified_at: {
            type: Sequelize.DATE
          },
          key_utenti_operation: {
            type: Sequelize.INTEGER
          },
          created_at: {
            type: Sequelize.DATE
          },
          updated_at: {
            type: Sequelize.DATE
          },
         },{
            timestamps: true,
            underscored: 0,
            freezeTableName: true,
          });
      
        return User;
      };
    
    ora la stringa sql sembra sistemata, ma ha creato dopo i campi created_at e updated_at due campi che non esistono e precisamente createAt e updatedAt

    ecco la stringa che genera ora
    Executing (default): SELECT `id`, `cognome`, `nome`, `idStato`, `username`, `password`, `email`, `idRuolo`, `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, `created_at`, `updated_at`,[color=#FF0000] `createdAt`, `updatedAt`[/color] FROM `users` AS `users` WHERE `users`.`username` = 'misonsan' LIMIT 1;
    i campi evidenziati in rosso non esistono nel db e sono stati creati in maniera impropria.

    l'errore complessivo è questo
    node:internal/process/promises:246
              triggerUncaughtException(err, true /* fromPromise */);
              ^
    
    Error
        at Query.run (C:\Coding\Projects\CRUD_Sif\backend\node_modules\sequelize\dist\lib\dialects\mysql\query.js:52:25)
        at C:\Coding\Projects\CRUD_Sif\backend\node_modules\sequelize\dist\lib\sequelize.js:313:28
        at processTicksAndRejections (node:internal/process/task_queues:96:5)
        at async MySQLQueryInterface.select (C:\Coding\Projects\CRUD_Sif\backend\node_modules\sequelize\dist\lib\dialects\abstract\query-interface.js:396:12)
        at async Function.findAll (C:\Coding\Projects\CRUD_Sif\backend\node_modules\sequelize\dist\lib\model.js:1102:21)
        at async Function.findOne (C:\Coding\Projects\CRUD_Sif\backend\node_modules\sequelize\dist\lib\model.js:1196:12) {
      name: 'SequelizeDatabaseError',
      parent: Error: Unknown column 'createdAt' in 'field list'
          at Packet.asError (C:\Coding\Projects\CRUD_Sif\backend\node_modules\mysql2\lib\packets\packet.js:728:17)
          at Query.execute (C:\Coding\Projects\CRUD_Sif\backend\node_modules\mysql2\lib\commands\command.js:29:26)
          at Connection.handlePacket (C:\Coding\Projects\CRUD_Sif\backend\node_modules\mysql2\lib\connection.js:456:32)
          at PacketParser.onPacket (C:\Coding\Projects\CRUD_Sif\backend\node_modules\mysql2\lib\connection.js:85:12)
          at PacketParser.executeStart (C:\Coding\Projects\CRUD_Sif\backend\node_modules\mysql2\lib\packet_parser.js:75:16)
          at Socket.<anonymous> (C:\Coding\Projects\CRUD_Sif\backend\node_modules\mysql2\lib\connection.js:92:25)
          at Socket.emit (node:events:390:28)
          at addChunk (node:internal/streams/readable:315:12)
          at readableAddChunk (node:internal/streams/readable:289:9)
          at Socket.Readable.push (node:internal/streams/readable:228:10) {
        code: 'ER_BAD_FIELD_ERROR',
        errno: 1054,
        sqlState: '42S22',
        sqlMessage: "Unknown column 'createdAt' in 'field list'",
        sql: "SELECT `id`, `cognome`, `nome`, `idStato`, `username`, `password`, `email`, `idRuolo`, `idRuolo_Day`, `noteutente`, `photo`, `remember_token`, `email_verified_at`, `key_utenti_operation`, 
    `created_at`, `updated_at`, `createdAt`, `updatedAt` FROM `users` AS `users` WHERE `users`.`username` = 'misonsan' LIMIT 1;",
        parameters: undefined
      },
      original:[color=#FF0000] Error: Unknown column 'createdAt' in 'field list'[/color]
    grazie
    Moreno
Devi accedere o registrarti per scrivere nel forum
3 risposte