什么" x =?"在SQL查询的条件下意味着什么?

时间:2014-04-24 23:34:21

标签: php sql

我需要帮助才能弄清楚这句话的意思:

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

我知道LIMIT 1的含义是什么,'= ?'是什么意思?

2 个答案:

答案 0 :(得分:4)

它是prepared statement

  

预准备语句或参数化语句用于以高效率重复执行相同的语句。

     

准备好的语句执行包括两个阶段:准备和执行。在准备阶段,将语句模板发送到数据库服务器。服务器执行语法检查并初始化服务器内部资源以供以后使用。

     

准备之后是执行。在执行期间,客户端绑定参数值并将它们发送到服务器。服务器根据语句模板和绑定值创建语句,以使用先前创建的内部资源执行它。

     

准备好的陈述可以重复执行。每次执行时,都会评估绑定变量的当前值并将其发送到服务器。该语句不会再次解析。语句模板不会再次传输到服务器。

     

每个预准备语句都占用服务器资源。声明应在使用后立即明确关闭。如果没有显式完成,则在PHP释放语句句柄时将关闭该语句。

     

使用预准备语句并不总是执行语句的最有效方式。仅执行一次的预准备语句会导致客户端 - 服务器往返次数超过未准备好的语句。

     

此示例通过替换位置的名称和值来执行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 :(得分:1)

您的查询:

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

?符号表示占位符。

我想,你使用pdo。当您执行查询时

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

变量$email的值将与?不同,如:

SELECT id, username, password FROM users WHERE email = 'bob@gmail.com' LIMIT 1

您可以找到有关它的更多信息here