我想破譯一個PHP程序中正在做Mysql查詢的特定語句。查詢有?:和?在裏面。有什麼功能?帶問號和冒號的Mysql聲明
$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);
感謝您的幫助。
Chris
我想破譯一個PHP程序中正在做Mysql查詢的特定語句。查詢有?:和?在裏面。有什麼功能?帶問號和冒號的Mysql聲明
$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);
感謝您的幫助。
Chris
它們看起來就像預先準備好的語句的佔位符。您提供?
,您稍後將提供實際值。從PHP文件看看這個例子:
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
來源:http://php.net/manual/en/pdo.prepared-statements.php
你具體的例子似乎是從CS-Cart。例如,根據他們的文檔?i
強制傳遞到該佔位符的值被轉換爲整數(這與sprintf
的工作方式類似)。
$number = 9;
echo sprintf("I have %d tasks.", $number);
// Outputs "I have 9 tasks."
在上述情況下,$number
被視爲整數。如果我試圖將字符串傳遞到該插槽中,我會得到截然不同的結果:
$number = "completed";
echo sprintf("I have %d tasks.", $number);
// Outputs "I have 0 tasks."
注意這裏怎麼我的類型不匹配,因此0
輸出代替completed
。
底線,這些是佔位符。
這很奇怪,儘管'?'是一個匿名佔位符,':order_data'可以是一個名字。我從來沒有在查詢中看到過這兩種混合。 –
@MarcB根據[此評論](http://www.php.net/manual/en/pdostatement.bindparam.php#98715),不支持混合兩者。我認爲OPs代碼在幕後還有其他事情要做。 – Sampson
字符?
是:
標識符以形成參數化查詢。稍後將值綁定到變量,引擎將執行多個值的查詢。這個工作更快,因爲查詢是由服務器編譯一次,而不是編譯每個變量=值集。
'db_get_field'不是內置函數。找到定義。 –
他正在使用pdo –
許可證已付費。只是好奇什麼?:是。 –