我需要帮助才能弄清楚这句话的意思:
SELECT id, username, password FROM users WHERE email = ?LIMIT 1
我知道LIMIT 1
的含义是什么,'= ?'
是什么意思?
答案 0 :(得分:4)
预准备语句或参数化语句用于以高效率重复执行相同的语句。
准备好的语句执行包括两个阶段:准备和执行。在准备阶段,将语句模板发送到数据库服务器。服务器执行语法检查并初始化服务器内部资源以供以后使用。
准备之后是执行。在执行期间,客户端绑定参数值并将它们发送到服务器。服务器根据语句模板和绑定值创建语句,以使用先前创建的内部资源执行它。
准备好的陈述可以重复执行。每次执行时,都会评估绑定变量的当前值并将其发送到服务器。该语句不会再次解析。语句模板不会再次传输到服务器。
每个预准备语句都占用服务器资源。声明应在使用后立即明确关闭。如果没有显式完成,则在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