【发布时间】:2013-08-16 11:02:54
【问题描述】:
我正在构建一个简单的登录脚本并具有以下内容:
$sparklyUsername = strtolower($_POST['sparklyUsername']);
$sparklyPassword = $_POST['sparklyPassword'];
if($stmt = $sparklyDatabaseConnection -> prepare("SELECT username FROM SYS_users WHERE username=?")) {
$stmt -> bind_param("s", $sparklyUsername);
$stmt -> execute(); /* Execute the query */
$stmt -> bind_result($result);
$stmt -> fetch();
现在一切正常,但如果我尝试检索多个列怎么办,例如:
if($stmt = $sparklyDatabaseConnection -> prepare("SELECT username, password, email FROM SYS_users WHERE username=?")) {
我收到错误“绑定变量的数量与准备好的语句中的字段数量不匹配”。
现在我已经习惯了 VBScript,这样的查询会返回一个记录集(例如 resultsRS("")),然后您使用列名(例如 resultsRS("username" )) 来获取一个特定的列,但从我可以收集的内容来看,使用上面的代码,我将每个列绑定到一个变量,如下所示:
$stmt -> bind_result($username, $password, $email);
如果是这样,我如何检查 now 行是否已经返回?在 VBScript 中,我会检查记录集是否为空(例如 IF resultsRS.EOF)。
如果我需要遍历所有返回的记录,我看到的所有示例都显示如下:
while ($row = $result->fetch_assoc()) {
但是,如果这似乎从我期望的列中创建了一行!
【问题讨论】:
-
您真的需要
$longWindyAndSparklyDatabaseConnection的所有东西来处理变量吗? -
所以你可能不需要绑定结果。只需获取它并遍历获取的结果
-
你的常识 - 不确定你在这里问什么?为什么我这样命名我的变量?由于我只输入一次并且可能会在其余时间复制和粘贴,因此长度无关紧要,但考虑到我正在编写代码以使其对其他开发人员尽可能清晰,它的描述性/直观性如何 是重要的。 (我正在制作我过去几年开发的 CMS 的 PHP 版本,并计划将其开源)。