PHP 准备方法在调用两次时不起作用?

2023-12-13

我使用的准备方法如下:

$db= new mysqli("localhost","***","***","***");

if ($db->connect_error) {
  die('Connection Error');
}

$id = 1;
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? '))
{
  $stmt->bind_param('i', $id);
  $stmt->execute();
  // $stmt->close();
  echo "Success<br>";
}
else {
  echo "Something broke :/<br>";
}

$id =2;
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? '))
{
  $stmt->bind_param('i', $id);
  $stmt->execute();
  echo "Success<br>";
}
else {
  echo "Something broke :/<br>";
  $error = $db->errno . ' ' . $db->error;
  echo $error;
}

如果我执行我得到的脚本

Success

有东西坏了:/

第二次调用后,如何找出准备方法失败的原因?因为某些原因,$db->errno返回 0,表示没有发生任何错误。但是,准备方法失败并返回 false,因此我无法检查$stmt->error;

我偶然发现当我删除第一个$stmt->execute()调用,然后再次调用准备方法工作正常(在第一次和第二次调用时)。我在这里缺少什么?

Edit

正如 Maxim Tkach 所建议的,如果我取消注释

// $stmt->close();

然后我得到

Success

Success

但这是为什么呢?我从未在任何地方读到关闭准备语句至关重要。

这是来自 PHP 手册:

关闭准备好的语句。 mysqli_stmt_close() 还取消分配 语句句柄。如果当前语句有待处理或未读 结果,该函数取消它们,以便下一个查询可以 被执行。

我没有看到他们说关闭以执行第二个准备语句至关重要。我错过了什么吗?


您需要阅读以下内容:准备好的报表

准备好的语句执行由两个阶段组成:准备和 执行。在准备阶段,报表模板被发送到 数据库服务器。服务器执行语法检查并初始化 服务器内部资源供以后使用。

and

每个准备好的语句都会占用服务器资源。报表应该 使用后立即明确关闭。如果没有明确完成, 当语句句柄被释放时,该语句将被关闭 PHP。

读完这篇文章后,我得出的结论是:如果不关闭前一个查询,则无法准备查询。执行后始终准备好结束询问.

你的代码应该重写如下:

$db= new mysqli("localhost","***","***","***");
if ($db->connect_error) {   
      die('Connection Error'); 
}
$id = 1; 
if($stmt = $db->prepare('SELECT name FROM table WHERE id = ? ')) { 
      $stmt->bind_param('i', $id);   
      $stmt->execute(); 
      echo "Success<br>"; 
} else {   
       echo "Something broke :/<br>"; 
}

$id = 2;
$stmt->bind_param('i', $id); 
$stmt->execute();
$stmt->close();   

P.S 如果添加绑定和执行的检查返回值 - 那就太好了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 准备方法在调用两次时不起作用? 的相关文章

  • 通过 XMLHttpRequest 将数据从 JavaScript 发送到 PHP

    再会 我正在尝试将一段简单的数据从一个 php 文件 manage php 发送到另一个 view php 我无法通过表单发送数据 我想通过 JS 脚本发送数据 这是我的尝试 var read function id xmlhttp new
  • 将 jQuery 数组字符串转换为 PHP 数组

    首先 我得说我对 PHP 还很陌生 我正在尝试获取一个可以使用 foreach 的 PHP 对象 以下字符串通过 ajax 传递 我正在尝试转动以下字符串 menu title TEST1 href title TEST2 href QWE
  • 在 symfony2 中为特定控制器设置 max_execution_time

    Using ini set 我可以扩展最大执行时间一个脚本的 在Symfony2 我可以添加ini set to web app php and web app dev php将增加的执行时间应用于所有控制器 但在这种情况下 我只想扩展最大
  • 如何在 Laravel 5.5 中编辑“页面因不活动而已过期”的视图

    在 Laravel 5 5 中 当您使用 CSRF 保护 默认情况下 并且在长时间不活动后发送发布请求时 您将收到此错误页面 屏幕截图 我对此错误表示同意 但是 我需要更改此错误的视图 文本以确保与我的应用程序风格和语言相匹配 关于如何编辑
  • Symfony php.ini Debian

    我在 Oracle VM VirtualBox 上使用 Debian 7 amd64 LAMP 服务器 我正在尝试安装 Symfony 但遇到了一些小问题 当我运行命令时 php my project name app check php
  • Laravel 5 与 SAML 2 和现有 IDP 集成

    我使用 Laravel 5 我正在尝试将 SAML 2 0 与其集成 我找到了这个包 https github com aacotroneo laravel saml2 https github com aacotroneo laravel
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 一次将多个值插入MySQL [重复]

    这个问题在这里已经有答案了 谁能解释一下为什么这个 PHP MySQL 不起作用 基本上我需要从表单中一次插入大量行 因此会有多个名称字段 多个短 中 长字段等 我收到此错误 Notice Undefined variable Short1
  • SimpleSAMLPHP 重定向循环

    我们正在尝试使用自定义 mysql 数据库设置 sso 但它在以下两个请求之间进入无限循环 POST http 192 168 0 15 simplesaml module php core loginuserpass php 设置Cook
  • WooCommerce:用文本覆盖购物车价格

    我们有很多产品具有以下功能 No price 零价格 我们让它们可以通过内置挂钩购买 但购物车仍然将它们显示为具有0 price结账时 我们希望购物车和结帐摘要显示 特殊订单 或任何其他文本 但 WooCommerce 似乎使基于文本的价格
  • CSV 从 UTF8 到 ISO-8859-1

    我正在尝试修改我的 CSV 导出 但它不会将我的 CSV 从 UTF 8 转换 保存为 ISO 8859 1 请问我做错了什么吗 实际上自从修改了这个之后 我得到了一个空的 CSV 文件 php 7 0 x function my Gene
  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • 疯狂的 crond 行为。不断使 bash 进程失效

    我有一个看起来像这样的 crontab SHELL bin bash PATH sbin bin usr sbin usr bin MAILTO root HOME 0 59 var www html private fivemin zda
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 无需下载整个文件即可读取 ID3 标签

    是否可以读取 MP3 文件的 ID3 标签 持续时间 艺术家 标题 而无需下载整个文件 我做了一些测试 只需下载 MP3 文件的几个字节就可以获得艺术家和标题标签 但我不确定持续时间和其他标签是否可能 Thanks 我刚刚发现 ffmpeg
  • 如何使用 PDO 动态构建查询

    我正在使用 PDO 并想做这样的事情 query dbh gt prepare SELECT FROM table WHERE column value query gt bindParam table tableName query gt
  • 从多个选择列表中插入数据到mysql数据库(html形式)

    我制作了一个表格 其中有商店的 ID
  • php向多个收件人发送邮件

    我可以通过在邮件程序中定义 id 来将电子邮件发送到一个电子邮件 id 但是当用户在表单中键入 消息和电子邮件 id 时 我无法理解如何发送到多个收件人 例如 我正在显示一个带有两个文本区域的表单 一个用于电子邮件 ID 一个用于自定义消息
  • 哪个 PHP 5 版本最常用?

    当我开发将在不同配置的客户端 Web 服务 通常使用共享托管 上使用的应用程序时 我应该假设大多数 Web 服务器都具有哪个 PHP 5 版本 例如 5 2 x 5 3 x 等 在所有使用 PHP 版本 5 的网站中 有 84 9 使用版本

随机推荐

  • 使用 NSPredicate 按日期过滤 coredata 不返回任何内容

    嗨 我是这个核心数据的新手 我有两个实体 CategoryList 和 ExpenseList CategoryList由两个属性组成1 日期 nsdate 2 类别 nsstring 在与 ExpenseList 的许多关系中 关系名称为
  • Cut() 错误 - “中断”不是唯一的

    我有以下数据框 a ID a 1 b 1 a 2 b 2 1 1 40 00 100 00 NA 88 89 2 2 100 00 100 00 100 100 00 3 3 50 00 100 00 75 100 00 4 4 66 67
  • for 循环中的闭包

    循环中的闭包给我带来了问题 我想我必须创建另一个返回函数的函数来解决问题 但我无法让它与我的 jQuery 代码一起工作 这是简化形式的基本问题 function foo val alert val for var i 0 i lt 3 i
  • JSONField Django 模板没有显示我去了什么

    经过大量研究 我仍然没有找到如何做到这一点 我的目的是能够在键 值中分离我的 json 以仅显示我认为必要的内容 例如标题 作者 这是一个 Django 网站 我已经做到了 在 models py 中 class Production mo
  • 错误:找不到本地工作区文件('angular.json')

    I have travis ci与我的 GitHub 帐户集成 https github com pradeep0601 Angular5 Router App 当我更新的时候 angular cli从 1 7 4 版本到 6 0 0 rc
  • iOS 模拟器无法启动

    我正在尝试运行 Xamarin Forms 的示例 我已经制作了示例应用程序 我已在项目中添加了所需的包 但由于某种原因我收到了错误 无法启动模拟器 无法加载框架 libswiftCore dylib 路径 Applications Xco
  • 使用超过 1 个条件对 data.frames 进行子集化

    我发现这个问题与我的类似 但我需要知道一种方法来用数学条件 例如小于或等于或大于或等于 gt 或 根据多个条件在 R 中对数据帧进行子集化 关于如何做到这一点有什么想法吗 这是我的 data frame 的 dput structure l
  • Angular:ngOnChanges 不更新值

    我是 ngOnchanges 的新手 面临以下问题 我的父组件正在 ngOnChanges 设置推荐值并将相同的值发送到子组件 child 接收与 ngOnChanges 中的输入相同的内容 根据某些条件 例如totalVal gt 0 我
  • 控制器子目录?

    我想将一些控制器隔离在我的 Symfony2 应用程序的子目录中 像这样的东西 route resource MyBundle Controller Admin type annotation prefix admin 该目录中有6个控制器
  • 为什么我的 Javascript 中的两个正则表达式文字在属性上有所不同?

    我读到Javascript 好的部分Douglas Crockford 指出 JavaScript 正则表达式文字共享同一个对象 如果是这样 那么这两个正则表达式文字为何会有所不同lastIndex财产 var a a g var b a
  • Swift/Firebase 数据库无效令牌错误

    Firebase 遇到一些相当奇怪的问题 我已经通过 cocoaPods 安装了 firebase 包括 GoogleService Info plist 等 但是当我尝试从 Firebase 读取值时 出现此错误 2016 06 16 1
  • 使用加载数据将 csv 文件传输到 hive 表 - 如何格式化 csv 中的日期以供 hive 表接受

    我正在使用加载数据语法将 csv 文件加载到表中 该文件与 hive 接受的格式相同 但仍然在发出加载数据后 最后 2 列在选择时返回 null 1750 651 2013 03 11 2013 03 17 1751 652 2013 03
  • 文件浏览器的 vscode api

    我正在编写 VSCode 扩展 需要根据用户选择的文件夹 子文件夹创建文件 删除文件 有没有办法通过 Visual Studio Code api 从资源管理器树中查找选定的文件夹 人们可以通过活动文本编辑器跟踪打开的文件或onDidOpe
  • 如何向 django 管理站点添加新用户发送电子邮件?

    每当管理员向管理站点添加新用户时 我想向用户电子邮件地址发送一封包含登录详细信息的电子邮件 我知道 Django 为此提供了 send mail 模块 但我不知道应该把这段代码放在哪里 并覆盖某些视图以在添加新用户时自动发送邮件 from
  • Visual Studio Code - 防止同一文件打开两次

    以前曾发生过几次这样的情况 我打开同一个文件两次 然后就忘记了 这意味着我在两个窗格中编辑同一文件 这意味着同一文件的两个版本 这导致了错误 并且我不明白为什么我的代码无法正常运行 是否有设置可以防止同一文件打开两次 更新 v1 11 0
  • 如何为自定义 Android 通知添加垂直线到 RemoteView?

    我正在努力向自定义 Android 通知添加垂直线 我尝试将这样的视图添加到我的相对布局中
  • 只有一个条目的多维数组

    我编写了一个通用函数来调用存储过程 我尝试使用多维数组来传递参数 现在 该过程可能只采用一个参数 因此我的多维数组也只有一个参数 但这样的数组长度是2 MyParameters param1 name param1 value MyPara
  • 为什么 TH32CS_SNAPMODULE32 不能单独工作?

    我正在尝试 WinAPI 中的一些东西 我的操作系统是Win7 x64 P1 Ultimate 当我尝试列出进程的所有模块时 我发现我想要的模块是 32 位模块 所以我替换了 TH32CS SNAPMODULE With TH32CS SN
  • 在 ASP.NET 中将字符串转换为 DbGeometry 时出现“空间类型和函数不可用”错误

    当尝试如下转换字符串时 52 0986413 5 2171528 到一个类型的变量DbGeometry像这样 Geometry System Data Entity Spatial DbGeometry FromText POINT pre
  • PHP 准备方法在调用两次时不起作用?

    我使用的准备方法如下 db new mysqli localhost if db gt connect error die Connection Error id 1 if stmt db gt prepare SELECT name FR