2014-04-24 31 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