2013-06-10 7 views
10

HY093に関する他の質問をすべて読んだ後、私はこのメッセージを開いてこのメッセージも受け取りました。ここでエラーHY093とMySQL挿入のPDOリクエスト

は私のテーブルです: Table PhpMyAdmin screenshot

そしてここでは、私の要求です: ($ connは私のPDO接続されている)

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

私はHY093エラーを持っておく理由は任意のアイデア?

+1

バインドされた変数の数がトークンの数と一致しません –

+0

これはそうではありませんでした。理由を見つけたAynber;) –

+0

これは**正確な**エラーでした。クエリにSocCoutryトークンがありません。数字が一致しないことを意味します。 –

答えて

15

あなたはパラメータの不一致を持っていることを意味し、あなたのbindParamsの一つのタイプミスを、持っている:

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

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

ありがとうございます。 –

+0

同じ問題が発生しました。そして、私のコードで間違いを発見するのに、すでに多くの時間がかかりました。まだ探しています... – LCB

+0

@LCBおそらくどこかでタイプミスですが、新しい質問を作成できます。新しい目のペアが助けになるかもしれません。 – aynber

1

する必要がありますここで私が見つけた面白いケースですこのクエリの実行:

INSERT INTO videosubmissions (member_login, submission_date) VALUES (":login", ":submission-date") 
でバウンド

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

作品...しかし

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

は、HY093のエラーで失敗します。 これは、stringからdateへの暗黙的な変換が原因であると思われましたが、明示的なSTR_TO_DATE(format、sDate)を試しても修正されませんでした。 しかし、PDO :: PARAM_STR値を持つ他のクエリですべてのプレースホルダを引用すると、問題が発生しました。

私はこれが実際にQに答えるわけではないことを知っていますが、何が起きているのかを理解するのに別のケースが追加されています。

+0

興味深いことに、クエリ内の文字列を手動で置き換え、MyPhpAdminで実行することも同様に機能します。 –

+1

私は多少同じ問題を抱えていますが、var-arrayにさらに多くのエントリが含まれていて、クエリが期待しているとHY093が発生する –