【发布时间】:2014-02-04 10:11:41
【问题描述】:
如果标题不好,我很抱歉。
我一直在研究Prepared Statements,发现如下代码here:
/* Create a new mysqli object with database connection parameters */
$mysqli = new mysqli('localhost', 'username', 'password', 'db');
if(mysqli_connect_errno()) {
echo "Connection Failed: " . mysqli_connect_errno();
exit();
}
/* Create a prepared statement */
if($stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=?
AND password=?")) {
/* Bind parameters
s - string, b - blob, i - int, etc */
$stmt -> bind_param("ss", $user, $pass);
/* Execute it */
$stmt -> execute();
/* Bind results */
$stmt -> bind_result($result);
/* Fetch the value */
$stmt -> fetch();
echo $user . "'s level of priviledges is " . $result;
/* Close statement */
$stmt -> close();
}
/* Close connection */
$mysqli -> close();
我不明白的部分是,在SQL Query "SELECT priv FROM testUsers WHERE username=?
AND password=?") 中,系统如何知道用户名和密码是什么。我知道那个?标记是占位符,下面也让我有点困惑:
$stmt -> bind_param("ss", $user, $pass);
因为我看不到$user 和$pass 在任何时候是如何定义的,因此SQL 查询将如何用$user 和$pass 替换实际的字符串。如果这是有道理的。这些价值观从何而来?在这个例子中它们在哪里?
【问题讨论】:
-
必须有一些额外的代码为
$user和$pass赋值。本文假设它们在别处初始化。 -
您必须从发布它们的表单中获取 $user 和 $pass。可能在您发布的脚本中被遗漏了。
-
您不理解准备好的语句,或者您不明白
$user和$pass的来源?它们必须来自某个地方,这与任何 SQL 魔法无关。 -
+1 用于研究准备好的陈述 :-)
-
@deceze 两者。但至少我在理解它们方面越来越好。我看到了这个例子并且非常困惑,因为作者没有说明 $user 和 $pass 的来源。我当然不是要抨击作者,因为他在顶部说这篇文章是为那些已经了解 PHP 和 SQL 的人准备的。