2013-06-10 5 views
10

Nachdem ich alle anderen Fragen über die HY093 gelesen habe, öffne ich diese, um herauszufinden, warum ich diese Nachricht auch habe.Fehler HY093 mit einem MySQL-PDO-Anfrage einfügen

Hier ist meine Tabelle: Table PhpMyAdmin screenshot

Und hier ist meine Bitte: (Wo $ conn meine PDO-Verbindung ist)

$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()); 

Jede Idee, warum ich immer haben einen HY093 Fehler entdeckt?

+1

sicher. Anzahl der gebundenen Variablen stimmt nicht mit der Anzahl der Token überein –

+0

Das war nicht so. Aynber gefunden warum;) –

+0

Das war ** genau ** Fehler. Es gibt keine: SocCoutry Token in der Abfrage, bedeutet Nummer stimmt nicht überein –

Antwort

15

Sie haben einen Tippfehler in einem Ihrer bindParams, was bedeutet, dass Sie eine fehlende Übereinstimmung in Parameter haben:

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

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

Danke, es funktioniert. –

+0

Ich stieß auf das gleiche Problem. Und es hat mich schon viel Zeit gekostet, den Fehler in meinem Code zu finden. Immer noch auf der Suche nach ... – LCB

+0

@LCB Es ist wahrscheinlich ein Tippfehler irgendwo, aber Sie können eine neue Frage erstellen. Ein frisches Augenpaar kann helfen. – aynber

1

Hier ist ein interessanter Fall, den ich gefunden:

Diese Abfrage wird ausgeführt:

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

Gebunden mit:

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

Werke ... aber

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

schlägt mit einem HY093 Fehler. Ich vermutete, dass dies durch die implizite Konvertierung von String zu Datum verursacht wurde, aber ein explizites STR_TO_DATE (Format, sDate) hat es nicht behoben. Wenn ich jedoch alle meine Platzhalter in anderen Abfragen mit PDO :: PARAM_STR Wert zitieren, verursachte es Probleme.

Ich weiß, dass dies nicht wirklich das Q beantwortet, aber es fügt einen weiteren Fall hinzu, um herauszufinden, was los ist.

+0

Interessanterweise funktioniert das manuelle Ersetzen der Zeichenfolgen in der Abfrage und das Ausführen auf MyPhpAdmin. –

+1

Ich habe etwas ähnliches Problem, fand ich, dass, wenn das var-Array mehr Einträge enthalten dann die Abfrage erwarten, dann passiert HY093 –

Verwandte Themen