16

HY093 に関する他のすべての質問を読んだ後、このメッセージを開いて、なぜこのメッセージが表示されるのかを調べました。

これが私のテーブルです: テーブル PhpMyAdmin のスクリーンショット

そして、ここに私の要求があります: ($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エラーが発生し続ける理由は何ですか?

4

3 に答える 3

24

bindParams の 1 つにタイプミスがあります。これは、パラメーターが一致していないことを意味します。

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

する必要があります

$sql->bindParam(":SocCountry",$_POST["soc_pays"],PDO::PARAM_STR);
于 2013-06-10T15:13:37.217 に答える
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 エラーで失敗します。これは、文字列から日付への暗黙的な変換が原因であると思われましたが、明示的な STR_TO_DATE(format, sDate) を試しても修正されませんでした。ただし、PDO::PARAM_STR 値を使用して他のクエリですべてのプレースホルダーを引用すると、問題が発生しました。

これは実際には Q に答えないことはわかっていますが、別のケースをミックスに追加して、何が起こっているのかを把握するのに役立ちます。

于 2014-01-31T00:02:26.133 に答える