在阅读了关于HY093的所有其他问题之后,我打开这个问题来弄清楚为什么我也收到了这个消息。
这是我的表格:
这是我的要求: (其中$ 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错误?
答案 0 :(得分:17)
您的某个bindParams中有拼写错误,这意味着您的参数不匹配:
$sql->bindParam(":SocCoutry",$_POST["soc_pays"],PDO::PARAM_STR);
应该是
$sql->bindParam(":SocCountry",$_POST["soc_pays"],PDO::PARAM_STR);
答案 1 :(得分: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(格式,sDate)并没有解决它。 但是,如果我使用PDO :: PARAM_STR值引用其他查询中的所有占位符,则会导致问题。
我知道这并没有真正回答Q,但它增加了另一个案例,以帮助弄清楚是什么。
答案 2 :(得分:0)
我的问题是参数数量与占位符数量不匹配。可能值得将其添加到@aynber的答案中