2013-06-10 21 views
10

Dopo aver letto tutte le altre domande su HY093, apro questo per capire perché ho ricevuto questo messaggio.Errore HY093 con una richiesta di inserimento PDO MySQL

Ecco il mio tavolo: Table PhpMyAdmin screenshot

E qui è la mia richiesta: (Dove $ conn la connessione via DOP)

$sql = $conn->prepare("INSERT INTO Sites (Email,URL,Title,Description,PageRank,Rewrite,MetaDesc,Origin,BackLink,nbBackLink,RssTitle,RssAddress,SocAddress,SocPostalCode,SocCity,SocCountry,SocTel,Offer,Status,nbHit) 
         VALUES (:Email,:URL,:Title,:Description,:PageRank,:Rewrite,:MetaDesc,:Origin,:BackLink,0,:RssTitle,:RssAddress,:SocAddress,:SocPostalCode,:SocCity,:SocCountry,:SocTel,:Offer,:Status,0)"); 
$sql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$pageRank = new GooglePageRank($_POST["site_url"]); 

$sql->bindParam(":Email",$_POST["submail"],PDO::PARAM_STR); 
$sql->bindParam(":URL",$_POST["site_url"],PDO::PARAM_STR); 
$sql->bindParam(":Title",$_POST["site_title"],PDO::PARAM_STR); 
$sql->bindParam(":Description",$_POST["site_desc"],PDO::PARAM_STR); 
$sql->bindParam(":PageRank",$pageRank->PageRank,PDO::PARAM_INT); 
$sql->bindParam(":Rewrite",stringToRewrite($_POST["site_title"]),PDO::PARAM_STR); 
$sql->bindParam(":MetaDesc",$_POST["site_desc"],PDO::PARAM_STR); 
$sql->bindParam(":Origin",$_POST["site_country"],PDO::PARAM_STR); 
$sql->bindParam(":BackLink",$_POST["site_backlink"],PDO::PARAM_STR); 
$sql->bindParam(":RssTitle",$_POST["site_rss_title"],PDO::PARAM_STR); 
$sql->bindParam(":RssAddress",$_POST["site_rss_addr"],PDO::PARAM_STR); 
$sql->bindParam(":SocAddress",$_POST["soc_addr"],PDO::PARAM_STR); 
$sql->bindParam(":SocPostalCode",$_POST["soc_cp"],PDO::PARAM_STR); 
$sql->bindParam(":SocCity",$_POST["soc_city"],PDO::PARAM_STR); 
$sql->bindParam(":SocCoutry",$_POST["soc_pays"],PDO::PARAM_STR); 
$sql->bindParam(":SocTel",$_POST["soc_tel"],PDO::PARAM_STR); 

$offer = $_POST["offer"] == "premium" ? 1 : 0; 
$status = $_POST["offer"] == "premium" ? 2 : 0; 

$sql->bindParam(":Offer",$offer,PDO::PARAM_INT); 
$sql->bindParam(":Status",$status,PDO::PARAM_INT); 

$sql->execute(); 
var_dump($sql->errorInfo()); 
var_dump($sql->errorCode()); 

Qualsiasi idea del perché io continuo hanno un errore HY093?

+1

sicuro. il numero di variabili vincolate non corrisponde al numero di token –

+0

Questo non era quello. Aynber ha trovato il perché;) –

+0

Questo era ** errore esatto **. Non ci sono: token di SocCoutry nella query, significa che il numero non corrisponde a –

risposta

15

Hai un errore di battitura in uno dei tuoi bindParams, che significa che hanno una mancata corrispondenza tra i parametri:

$sql->bindParam(":SocCoutry",$_POST["soc_pays"],PDO::PARAM_STR); 

dovrebbe essere

$sql->bindParam(":SocCountry",$_POST["soc_pays"],PDO::PARAM_STR); 
+0

Grazie, funziona. –

+0

Ho riscontrato lo stesso problema. E mi è già costato un sacco di tempo per scoprire l'errore nel mio codice. Sto ancora cercando ... – LCB

+0

@LCB Probabilmente è un errore di battitura da qualche parte, ma puoi creare una nuova domanda. Un paio di occhi freschi può aiutare. – aynber

1

Ecco un caso interessante che ho trovato:

Esecuzione di questa query:

INSERT INTO videosubmissions (member_login, submission_date) VALUES (":login", ":submission-date") 

legato con:

[ ':login',   $info['login'], PDO::PARAM_STR ], 
[ ':submission-date', $submission_date, PDO::PARAM_STR ] 

opere ... ma

INSERT INTO videosubmissions (member_login, submission_date) VALUES (:login, :submission-date) 

fallisce con un errore HY093. Avevo il sospetto che questo fosse causato dalla conversione implicita dalla stringa alla data, ma provare un esplicito STR_TO_DATE (formato, sDate) non lo ha risolto. Tuttavia, se cito tutti i miei segnaposto in altre query con il valore PDO :: PARAM_STR, ha causato problemi.

So che questo non risponde veramente alla Q, ma aggiunge un altro caso al mix per aiutare a capire cosa succede.

+0

È interessante notare che sostituisce manualmente le stringhe nella query ed è in esecuzione su MyPhpAdmin. –

+1

ho un po 'lo stesso problema, ho trovato che se il var-array contiene più voci allora la query si aspetta, quindi accade HY093 –

Problemi correlati