2012-03-19 18 views
28

將形式爲:name的命名參數傳遞給PDOStatement::bindParam()時,無論是否使用前導冒號,它都可以正常工作。傳遞給PDOStatement :: bindParam()的參數名稱的前導冒號是否可選?

即無論是這樣的:

$statement->bindParam(':name', $var); 

或本:

$statement->bindParam('name', $var); 

似乎工作。

下面是PDOStatement::bindParam()

參數

參數標識的文檔。對於使用名爲 佔位符的準備好的語句,這將是名稱爲的參數名稱。對於使用問號佔位符的 準備好的語句,這將是參數的1索引位置 。

這是否意味着冒號可以被忽略?

+0

我想說冒號在SQL表達式中是需要的,但是當您用'bindParam'命名(識別)名稱時不需要冒號。 PDO函數在這裏可能不那麼嚴格,因爲它可以定義它自己的接口來命名參數。 – hakre 2012-07-01 11:01:50

回答

26

不,因爲文檔沒有提到這一點,我認爲可以安全地假設這種行爲沒有得到正式支持,也不應該依賴。但是,它確實發生了工作(至少在PHP 5.3.24中) - 在內部冒號會被添加到參數中(如果缺失的話)(see ext/pdo/pdo_stmt.c:363 in the PHP 5.3.24 source code)。

+0

我在想同一個問題。我的猜測是:用於嚴格區分colName和sql關鍵字。很高興知道PDO將修復丟失:在綁定中。我會採取客戶的建議,並保持:在SQL語句。 – CoR 2013-11-13 10:21:15

相關問題