gpt4 book ai didi

php - MYSQLI prepared statement proceeds 没有输出

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:56 25 4
gpt4 key购买 nike

我刚开始学习 MYSQLI 准备语句技术,遇到了非常烦人的问题。我的代码在 bind_result() 处停止。我就是不明白哪里出了问题,所以请大家帮帮我。

这是我的 config.php:

 <?php 
$db_name = 'site';
$db_user = 'root';
$db_pass = 'root';
$db_host = 'localhost';
$db_port = 8889;

$db = new mysqli($db_host, $db_user, $db_pass, $db_name, $db_port);

if($db->connect_errno > 0){
die('Unable to connect to database [' . $db->connect_error . ']');
}
?>

还有我的主要代码:

 <?php
include 'config.php';
$post_id=450;
$stmt = $db->prepare("SELECT * FROM messages WHERE post_id = ?");
if ( false===$stmt ) {
die('prepare() failed: ' . htmlspecialchars($db->error));
}
$ex=$stmt->bind_param('i', $post_id); // Bind "$post_id" to parameter.
if ( false===$ex ) {
die('bind_param() failed: ' . htmlspecialchars($stmt->error));
}
$ex=$stmt->execute();// Execute the prepared query.
if ( false===$ex ) {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
$ex=$stmt->store_result();
if ( false===$ex ) {
die('store_result() failed: ' . htmlspecialchars($stmt->error));
}
$ex=$stmt->bind_result($p);
if ( false===$ex ) {
die('bind_result() failed: ' . htmlspecialchars($stmt->error));
}
while($stmt->fetch()){
echo $p;
}

?>

最佳答案

您最初的问题是您没有检查每个 调用是否失败,而只是检查开始时的少数几个。 store_resultbind_result 也可能失败。

您的具体问题(一旦您修复了初始问题)是您正在执行 select * 以获得 多个 列,但您只绑定(bind) 一个在结果中。从您从 bind_result 调用中获得的错误消息中可以明显看出这一点:

Number of bind variables doesn't match number of fields

如果您将 select 语句更改为类似 select id from ... 的语句,您会发现它开始工作了。

但是,假设您想要更多列,您应该在绑定(bind)中提供更多变量,例如:

$stmt = $db->prepare("SELECT col1, col2 FROM messages WHERE post_id = ?");
:
$ex = $stmt->bind_result($param1, $param2);

你会注意到我没有在上面使用 select *,最好在几乎所有情况下都使用显式列命名,以便:

  • 当数据库架构发生变化时,您不会感到惊讶;
  • 您只获得所需的数据;
  • 您可以正确地将列映射到结果变量。

几乎唯一我发现可以使用select * 的地方是在数据库分析工具中,您可以在其中获取所有内容。如果您事先知道自己想要什么,那就是您应该提出的要求。

关于php - MYSQLI prepared statement proceeds 没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592975/

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