绑定后不从 mysqli 语句输出变量
variables are not output from mysqli statement after binding
我正在尝试 select 我的数据库中的内容并回显它们。出于某种原因,我唯一可以回应的就是电子邮件。 id 和用户名不显示。我没有收到任何错误,它们只是没有出现。
$sql = "SELECT id, email, username FROM users WHERE email = ?";
if ($stmt = mysqli_prepare($link, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $param_email);
$param_email = $email;
if (mysqli_stmt_execute($stmt)) {
mysqli_stmt_store_result($stmt);
if (mysqli_stmt_num_rows($stmt) == 1) {
mysqli_stmt_bind_result($stmt, $id, $email, $username);
$error = 0;
$to = $email;
echo "id:".$id;
echo $username;
echo $email;
} else {
//some stuff
}
} else {
$error = 1;
}
}
我错过了什么?
您看不到从数据库中提取的任何值的原因是您忘记在 bind_result()
之后调用 fetch()
。
但是,你把事情复杂化了。您不需要那么多 if
语句,如果您有多个列,则不应使用 bind_result()
。这变得非常混乱。使用 get_result()
获取结果,然后获取您需要的单行(假设电子邮件是唯一的并且您的 SELECT return 有 0 或 1 条记录)。
$stmt = $link->prepare("SELECT id, email, username FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if ($result) {
$error = 0;
$to = $result['email'];
echo "id:".$result['id'];
echo $result['username'];
echo $result['email'];
} else {
$error = 1;
}
不需要mysqli_stmt_num_rows
。数据本身会告诉您某些内容是否被 return 编辑。这也可以防止您在使用无缓冲查询时遇到类似的问题。很容易不小心遗漏了mysqli_stmt_store_result()
.
永远不要检查 mysqli_stmt_execute()
或 mysqli_prepare()
的 return 值。这是一种可怕而混乱的做法。确保您已打开错误报告。参见 How to get the error message in MySQLi?
我正在尝试 select 我的数据库中的内容并回显它们。出于某种原因,我唯一可以回应的就是电子邮件。 id 和用户名不显示。我没有收到任何错误,它们只是没有出现。
$sql = "SELECT id, email, username FROM users WHERE email = ?";
if ($stmt = mysqli_prepare($link, $sql)) {
mysqli_stmt_bind_param($stmt, "s", $param_email);
$param_email = $email;
if (mysqli_stmt_execute($stmt)) {
mysqli_stmt_store_result($stmt);
if (mysqli_stmt_num_rows($stmt) == 1) {
mysqli_stmt_bind_result($stmt, $id, $email, $username);
$error = 0;
$to = $email;
echo "id:".$id;
echo $username;
echo $email;
} else {
//some stuff
}
} else {
$error = 1;
}
}
我错过了什么?
您看不到从数据库中提取的任何值的原因是您忘记在 bind_result()
之后调用 fetch()
。
但是,你把事情复杂化了。您不需要那么多 if
语句,如果您有多个列,则不应使用 bind_result()
。这变得非常混乱。使用 get_result()
获取结果,然后获取您需要的单行(假设电子邮件是唯一的并且您的 SELECT return 有 0 或 1 条记录)。
$stmt = $link->prepare("SELECT id, email, username FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if ($result) {
$error = 0;
$to = $result['email'];
echo "id:".$result['id'];
echo $result['username'];
echo $result['email'];
} else {
$error = 1;
}
不需要mysqli_stmt_num_rows
。数据本身会告诉您某些内容是否被 return 编辑。这也可以防止您在使用无缓冲查询时遇到类似的问题。很容易不小心遗漏了mysqli_stmt_store_result()
.
永远不要检查 mysqli_stmt_execute()
或 mysqli_prepare()
的 return 值。这是一种可怕而混乱的做法。确保您已打开错误报告。参见 How to get the error message in MySQLi?