簡體   English   中英

帶有 MySQL 插入 PDO 請求的錯誤 HY093

[英]Error HY093 with a MySQL Insert PDO Request

在閱讀了有關 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 錯誤嗎?

您的 bindParams 中有一個拼寫錯誤,這意味着您的參數不匹配:

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

應該

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

這是我發現的一個有趣的案例:

運行此查詢:

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,但它在混合中添加了另一個案例以幫助弄清楚發生了什么。

我的問題是參數數量與占位符數量不匹配。 可能值得將此添加到@aynber 的答案中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM