Insert into che da errore: numero di parametri non validi....

MarcoGrazia

Utente Attivo
15 Dic 2009
853
21
28
63
Udine
www.stilisticamente.com
Ciao.
Ho un problema apparentemente impossibile da risolvere, ma siccome i miracoli sul lavoro vanno risolti e l'impossibile non esiste mi tocca risolverlo comunque.
Va be a parte le spiritosaggini il problema è questo: non riesco a inserire un record in una tabella di database. ( secondo il PHP/MySQL ).
La query:
Codice:
INSERT INTO pagina (id_pagina, nome, visibile, creata, titolo_pagina, titolo_header, occhiello_header)
VALUES (NULL, ':nome', :visibile, ':creata', ':titolo_pagina', ':titolo_header', ':occhiello_header')
Tenete presente che sto usando il PDO e quindi in values ci sono dei segnaposto; tutti i segnaposto sono qualificati e validi.

La struttura della tabella è questa:
Codice:
CREATE TABLE IF NOT EXISTS `pagina` (
  `id_pagina` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(256) NOT NULL COMMENT 'nome della pagina',
  `visibile` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0=non visibile, 1= visibile',
  `creata` date NOT NULL,
  `titolo_pagina` varchar(256) NOT NULL,
  `titolo_header` varchar(256) NOT NULL,
  `occhiello_header` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id_pagina`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='Definisce la pagina' AUTO_INCREMENT=15 ;

L'errore:
File:C:\WWW\X\admin\verifica_pagine_sito.php
Linea: 38
Codice: HY093
Messaggio:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
 
quando sviluppai la classe che utilizzo per gli accessi al db, ricordo di aver litigato con una situazione simile alla tua,
usando pdo,
Codice:
 $sth->bindParam(1,  $par1)
ebbene i parametri devono essere senza apici, quindi prova a togliere gli apici dai VALUES
(ometterei anche la colonna gestita in automatico)
non ho altre idee
ciao
Marino
 
i parametri devono essere indicati senza apici sicuramente, perché altrimenti sono interpretati come stringhe di dati,
rimane da controllare che tutti i parametri abbiano assegnato un adeguato valore ovvero per ciascuno di essi sia eseguita
la bindValue o analoga, persistendo il problema posta la classe
ciao
Marino
 
Ma no assolutamente le stringhe vanno "apicate" mentre gli interi no, se ci stai attento funziona, inoltre il dato così è più sicuro, nessuno può inserire una stringa su un intero mentre un intero verrebbe trasformato in stringa.
Dopotutto la validazione dei dati non deve essere affidata al MySQL ma al linguaggio che invia questi dati, in questo caso il PHP.
Infatti alla fine ho risolto e ho visto dove sbagliavo, passavo dei valori nulli perché mi ero intestardito a realizzare un form di passaggio sia per l'update che per il nuovo progetto usando comunque dei valori array, in pratica non differenziavo mai quali dei due casi erano inviati.
Siccome avevo iniziato a creare un nuovo progetto invece di fare l'upgrade di uno già inserito non mi ero accorto dell'errore, ora funziona, c'è solo un piccolo insignificante problema di secondaria importanza... nonostante le variabili sono giustee qualificate, non ci sono più errori ne formali e ne sostanziali, nel database non mi ritrovo nulla.
Ma questo sarà oggetto di un nuovo post. :) anzi :(
 

Discussioni simili