2016-06-11 123 views

回答

1

:id是準備好的查詢的命名佔位符。在你的代碼在其他地方,是沿着線查詢:

SELECT stuff FROM something WHERE id = :id 
是獲得通過PDO的 prepare功能運行

If PDO::PARAM_INT is not necessary, why would I need to use it?

安全性/數據一致性。見PDO::PARAM_INT is important in bindParam?

0

What does : mean before id in the example below? Is it necessary?

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

是的,這是必要的。在PDOStatement::bindValue中定義:id是您的參數標識符的命名佔位符。如果您使用問號佔位符,則您的參數標識符應爲1

指定佔位符的形式必須與:id一樣。如果您的指定佔位符沒有該表單,則會導致錯誤。

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

Can I say :id is a variable?

沒有用,:id是你parameter-identifier

If PDO::PARAM_INT is not necessary, why would I need to use it?

聲明預期的數據類型爲一個很好的安全策略(不是你可以依靠這只是爲了安全課程)。如果您使用PDOStatement::bindParam,則可以定義數據類型的長度以增加安全性。

0

What does : mean before id in the example below? Is it necessary?

沒什麼特別的。這只是一種語法。就像在php變量前面的$符號一樣。在查詢中,必須讓解析器區分佔位符和其他查詢部分。因此,在bindValue()中使用完全相同的名稱是有意義的

Can I say :id is a variable?

非常多的是。通過meaming它是一個變量,但是爲了不使php變量混淆,它被稱爲「佔位符」。

If PDO::PARAM_INT is not necessary, why would I need to use it?

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

+1

如果您將一個字符串傳遞給聲明爲只接受整數的變量值與PDO :: PARAM_INT會發生什麼?如果出現錯誤,你可以稱之爲一種更「安全」的做事方式嗎?但是,你會有一個答案。你將如何證明自己?順便說一句,我真的很喜歡你的個人資料圖像?它讓我想起某人。 ;)如果你投了我票(是的,我知道你有多愛我和我的答案),謝謝你,這意味着來自你的很多。 –