我需要帮助弄清楚这句话的意思:
SELECT id, username, password FROM users WHERE email = ?LIMIT 1
我知道LIMIT 1
是什么意思,但'= ?'
是干什么的?
这是一个准备好的语句。
准备好的语句或参数化的语句用于高效地重复执行同一语句。
prepared语句执行由两个阶段组成:prepared和execute。在准备阶段,一个语句模板被发送到数据库服务器。服务器执行语法检查并初始化服务器内部资源以供以后使用。
准备后执行。在执行过程中,客户端绑定参数值并将其发送到服务器。服务器根据语句模板和绑定值创建一个语句,以使用以前创建的内部资源执行该语句。
准备好的语句可以重复执行。每次执行时,都会评估绑定变量的当前值并将其发送到服务器。不会再次分析该语句。语句模板不会再次传输到服务器。
每个准备好的语句都占用服务器资源。语句应在使用后立即显式关闭。如果没有显式执行,那么当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。
您的查询:
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
你可以在这里找到更多关于它的信息