2013-06-10 15 views
10

Po przeczytaniu wszystkich innych pytań na temat HY093, otwieram ten, aby dowiedzieć się, dlaczego mam tę wiadomość.Błąd HY093 z prośbą o wstawienie PDO MySQL

Tu jest mój tabeli: Table PhpMyAdmin screenshot

A oto moja prośba: (gdzie $ conn jest moje połączenie ChNP)

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

Każdy pomysł, dlaczego trzymam mieć błąd HY093?

+1

pewnie. liczba powiązanych zmiennych nie pasuje do liczby tokenów –

+0

To nie było to. Aynber znalazł dlaczego;) –

+0

To był ** dokładny ** błąd. W zapytaniu nie ma tokenu SocCoutry, oznacza to, że numer nie pasuje do –

Odpowiedz

15

Masz literówkę w jednym ze swoich bindParams, co oznacza, że ​​masz niedopasowanie parametrów:

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

powinny być

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

Dzięki, działa. –

+0

Napotkałem ten sam problem. I już sporo czasu kosztowało mnie znalezienie błędu w moim kodzie. Nadal szukasz ... – LCB

+0

@LCB Prawdopodobnie jest to literówka, ale możesz utworzyć nowe pytanie. Pomocna może być świeża para oczu. – aynber

1

Oto ciekawy przypadek znalazłem:

Po uruchomieniu tego zapytania:

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

Związany z:

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

prac ... ale

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

nie powiedzie się z powodu błędu HY093. Podejrzewałem, że było to spowodowane niejawną konwersją ciągu znaków do daty, ale próba jawnej STR_TO_DATE (format, sDate) nie naprawiła tego. Jednak jeśli zacytuję wszystkie moje placeholder w innych zapytaniach z wartością PDO :: PARAM_STR, spowodowało to problemy.

Wiem, że to naprawdę nie odpowiada na pytanie, ale dodaje do miksu inny przypadek, aby pomóc zrozumieć, co jest grane.

+0

Co ciekawe, ręczne wstawianie napisów w zapytaniu i uruchamianie w MyPhpAdmin również działa. –

+1

Mam nieco ten sam problem, znalazłem, że jeśli tablica var zawiera więcej wpisów, to zapytanie oczekuje, a następnie HY093 dzieje –

Powiązane problemy