【问题标题】:get results from MSSQL prepared statement从 MSSQL 准备好的语句中获取结果
【发布时间】:2023-03-03 09:02:23
【问题描述】:

此代码打印出列名列表。但我希望它能够为具有 JSmith 的LoginName 的用户打印出存储在UserName 表中的信息。

 $loginname = "JSmith";
 $stmt = $dbh->prepare("SELECT * FROM UserName WHERE LoginName=:login_name");
 $stmt->bindValue(":login_name", $login_name, PDO::PARAM_STR);
 $stmt->execute();

echo "<table><tr>";
$result = $stmt->fetch(PDO::FETCH_ASSOC);
 print_r($result);
foreach ($result as $key => $val){
    echo "<th>" . $key . "</th>";   
}
echo "</tr>";
echo "</table>";

为什么不返回包含用户名的行?查看echo gettype($result) 告诉我它们是字符串和整数;不像每个返回的数组本身就是一个数组。我敢肯定这是一件简单的事情,但任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: php pdo


    【解决方案1】:

    您打印的是键,而不是值。键是列名,值是对应的列值。

    print_r($result) 表明 $stmt-&gt;fetch() 返回一个包含您期望的信息的数组,而相应的 HTML 根本没有反映这一点。

    http://php.net/manual/en/pdostatement.fetch.php#example-1018

    让我们修复它。

    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    print_r($result);
    foreach ($result as $key => $val){
        echo "<th>" . $key . "</th>";
        echo "<td>" . $val . "</td>";
    }
    echo "</tr>";
    echo "</table>";
    

    【讨论】:

    • 是的,这是真的。但是,有些事情仍然不对劲。因为当我打印 $val 时,我从第一行记录中获取值。不是用户 JSmith 的记录。这就是为什么我认为循环有问题。但它必须与查询。有什么方法可以打印出我准备的查询,以便我可以查看它的语法是否被正确解释?
    • 这个查询对我来说很好。您可以在数据库 shell 中运行类似的查询,以查看其中的实际内容:SELECT * FROM UserName WHERE LoginName = 'JSmith'
    • 这篇帖子stackoverflow.com/a/2243512/1252748 推荐echo $stmt-&gt;queryString 查看实际进行的查询。但是它告诉我SELECT * FROM UserName WHERE LoginName=:login_name。即使我将它放在 bindValue() 行之后。我应该期望看到它这样,还是应该期望看到它与绑定值 JSmith?
    • 您应该期望看到它。参数替换由数据库本身完成 - 这是 PDO 等准备好的语句 API 的全部意义。
    • 是的,这肯定是查询的问题;手动输入它会检索正确的行。
    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 2017-03-26
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多