gpt4 book ai didi

PHP/MySQL 了解准备好的语句返回什么

转载 作者:行者123 更新时间:2023-11-30 01:23:32 26 4
gpt4 key购买 nike

我正在构建一个简单的登录脚本并具有以下内容:

$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=?")) {

我收到错误“绑定(bind)变量的数量与准备好的语句中的字段数量不匹配”。

现在我习惯了 VBScript,其中这样的查询会返回一个记录集(例如 resultsRS("")),然后您可以使用列名进行查询(例如 resultsRS("username") )) 来获取特定的列,但从我能收集到的信息来看,使用上面的代码,我将每列返回到一个变量,如下所示:

$stmt -> bind_result($username, $password, $email);

如果是这种情况,我如何检查现在行是否已返回?在 VBScript 中,我将检查记录集是否为空(例如 IF resultsRS.EOF)。

如果我需要循环遍历所有返回的记录,我见过的所有示例都会显示如下内容:

while ($row = $result->fetch_assoc()) {

但是,如果这似乎从我期望的列中创建了一行!

最佳答案

What is Returned by Prepared Statement

说来话长。而书籍作者通常对此一无所知。

您真正需要了解的是,mysqli 准备好的语句并不打算按原样在应用程序代码中使用,而只是作为更高级别抽象库的源 Material 。

所以,如果你不打算写一个,就退出使用 mysqli,而是转向 PDO 。它具有更直观的 API 和所有熟悉的获取结果的方法。

$sql  = "SELECT username, password, email FROM SYS_users WHERE username=?";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($_POST['sparklyUsername']));
$row = $stmt->fetch();

它确实会创建一行,您可以像 $row['username']

这样,无论请求多少个字段,您都将获得数据。您也可以将 fetch() 放入 while 循环中。

关于PHP/MySQL 了解准备好的语句返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com