2014-04-24 28 views
3

我需要幫助找出這句話的意思是:什麼是「x =?」意味着在SQL查詢的條件?

SELECT id, username, password FROM users WHERE email = ?LIMIT 1 

我知道LIMIT 1手段,而是什麼'= ?'是?

+2

更多信息''代表*佔位符*在mysqli或PDO準備語句中使用..請參閱http://stackoverflow.com/a/60496/2864740(大概在查詢文本中應該有一個空格以及'''':'.. email = ?LIMIT 1'。) – user2864740

回答

4

這是一個prepared statement

預準備語句或參數化語句用於高效地重複執行相同的語句。

準備好的語句執行由兩個階段組成:準備和執行。在準備階段,語句模板被髮送到數據庫服務器。服務器執行語法檢查並初始化服務器內部資源供以後使用。

Prepare後面跟着執行。在執行期間,客戶端綁定參數值並將它們發送到服務器。服務器從語句模板和綁定值中創建一個語句,以使用先前創建的內部資源執行語句。

準備好的語句可以重複執行。在每次執行時,綁定變量的當前值將被評估併發送到服務器。該語句不再被解析。語句模板不會再次傳輸到服務器。

每個準備好的語句佔用服務器資源。使用後應立即關閉聲明。如果沒有明確地完成,當語句句柄被PHP釋放時,該語句將被關閉。

使用預準備語句並不總是執行語句的最有效方式。準備好的語句只執行一次會導致比未準備好的語句更多的客戶端 - 服務器往返。

本示例通過將位置名稱和值替換爲INSERT查詢來執行INSERT查詢。佔位符。

<?php 
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)"); 
$stmt->bindParam(1, $name); 
$stmt->bindParam(2, $value); 

// insert one row 
$name = 'one'; 
$value = 1; 
$stmt->execute(); 

我建議你閱讀這整個教程。您還應該查看PDO

1

您的疑問:

SELECT id, username, password FROM users WHERE email = ? LIMIT 1 

?標誌的含義是佔位符。

我想,你使用pdo。當你執行你的查詢變量$email

$email = // get some email 
$stmt = $dbh->prepare("SELECT id, username, password FROM users WHERE email = ? LIMIT 1"); 
$stmt->bindParam(1, $email); 

值將被放置insetead的?樣?

SELECT id, username, password FROM users WHERE email = '[email protected]' LIMIT 1 

你可以找到關於它here