簡體   English   中英

在 PHP PDO 中使用 bindValue() 時“:”是什么意思?

[英]What does “:” mean when using bindValue() in PHP PDO?

在下面的例子中:id之前是什么意思? 有必要嗎?

$sth->bindValue(':id', $id, PDO::PARAM_INT);

我可以說:id是一個變量嗎?

如果不需要PDO::PARAM_INT ,我為什么需要使用它?

:id是准備好的查詢的命名占位符。 在您的代碼中的其他地方有一個查詢:

SELECT stuff FROM something WHERE id = :id

通過 PDO 的prepare功能運行。

如果不需要PDO::PARAM_INT ,我為什么需要使用它?

安全/數據一致性。 看到PDO::PARAM_INT 在 bindParam 中很重要嗎?

在下面的例子中 : 在 id 之前是什么意思? 有必要嗎?

沒什么特別的。 這只是一種語法。 就像 php 變量前面的 $ 符號。 在查詢中,有必要讓解析器將占位符與任何其他查詢部分區分開來。 因此在 bindValue() 中使用完全相同的名稱是有意義的

我可以說 :id 是一個變量嗎?

幾乎是的。 顧名思義,它是一個變量,但為了使它不會與 php 變量混淆,它被稱為“占位符”。

如果不需要 PDO::PARAM_INT,我為什么需要使用它?

它與安全性完全無關。 您可能只想使用此修飾符來告訴數據庫您正在發送一個整數。 說到 mysql,這個數據庫對數據類型非常寬容,幾乎任何地方都可以省略類型修飾符——在這種情況下,數據將被綁定為字符串。 您可能很少想顯式設置它:僅當您在 LIMIT 子句中使用占位符或發送涉及數學的 bigint 值時。

在下面的例子中:id之前是什么意思? 有必要嗎?

$sth->bindValue(':id', $id, PDO::PARAM_INT);

是的,這是必要的。 PDOStatement::bindValue中定義了:id是參數標識符的命名占位符。 如果您使用問號占位符,則您的參數標識符將為1

您命名的占位符的形式必須類似於:id 如果您命名的占位符沒有該形式,則會導致錯誤。

  • 致命錯誤: ...在WHERE id = ::id附近使用正確的語法

我可以說 :id 是一個變量嗎?

不, :id是您的parameter-identifier

如果不需要 PDO::PARAM_INT,我為什么需要使用它?

聲明預期的數據類型是一種很好的安全策略(當然,您不能僅僅為了安全而依賴它)。 如果您使用PDOStatement::bindParam,您可以定義數據類型的長度以增加安全性。

暫無
暫無

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

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