从 mysql 转变为 mysqli

2024-03-09

我对 PHP 中的 mysqli 接口有点困惑。当我昨天开始将旧的 mysql 代码更改为 mysqli 时,文档引导我走上了这条路::prepare, ::bind_params and ::execute.

在我努力处理结果的过程中,我最终编写了自己的 fetch_assoc - 并且遇到了我在 SO 上讨论的问题。一位评论员质疑我不使用时在做什么::fetch_assoc。我什至没有注意到 mysqli_result 类。当我将 mysqli 代码从::preapre to ::query,结果处理变得更加容易 - 但有一个例外:以前我使用时::bind_results为了提取列,生成的 PHP 关联数组将携带正确的数据类型;当我现在使用::fetch_assoc等等,我得到的只是一个字符串数组。

我现在正在编写一个转换器。我只是想,既然我在理解 mysqli 库时已经犯了一个重大错误,我最好在这里发帖看看是否有一种“官方”方法来获取类型一致的关联结果数组。


如果您正在使用mysqlnd http://docs.php.net/mysqlnd作为传输客户端并设置选项MYSQLI_OPT_INT_AND_FLOAT_NATIVE在 mysqli 对象上,您实际上获得了本机类型。

echo 'phpversion: ', phpversion(), "\n";

$m = new mysqli('localhost', 'localonly', 'localonly', 'test');
$m->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);
$m->query('CREATE TABLE soTest (x int)');
$m->query('INSERT INTO soTest (x) VALUES (1),(2)');

$r = $m->query('SELECT x from soTest');
var_dump($r->fetch_assoc());

prints


phpversion: 5.3.3
array(1) {
  ["x"]=>
  int(1)
}  

PHP 5.3 中添加了此功能。


让您开始使用PDO http://docs.php.net/pdo(如果您选择使用它):

<?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// the pdo_mysql driver uses emulated prepared statements by default
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// afaik only the mysqlnd client supports native types, with libmysql you'll get only strings/null
echo 'client: ', $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), "\n";

// set up test environment
$pdo->exec('CREATE TEMPORARY TABLE soTest (x int, y varchar(16))');
$pdo->exec("INSERT INTO soTest (x,y) VALUES (1,'a'),(2,null)");

// statement with positional parameter
$stmt = $pdo->prepare('SELECT x,y FROM soTest WHERE x>?');
$stmt->setFetchMode(PDO::FETCH_ASSOC);

$stmt->execute( array(0) );
foreach( $stmt as $row ) {
  foreach( $row as $col ) {
    echo gettype($col), '(', $col, ') ';
  }
  echo "\n";
}

prints

client: mysqlnd 5.0.7-dev - 091210 - $Revision: 300533 $
integer(1) string(a) 
integer(2) NULL() 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 mysql 转变为 mysqli 的相关文章

  • XML 和 INI 哪个更快?

    我想知道 XML 是否比 INI 更快 反之亦然 我正在开发一个包含许多文件的网站 这个问题与我的问题有关关于包含许多文件 https stackoverflow com questions 7777522 too many include
  • 获取本周星期一和星期五的日期 (PHP)

    如何获取本周周一和周五的日期 我有以下代码 但如果当天是星期日或星期六 则会失败 current day date N days to friday 5 current day days from monday current day 1
  • 如何使用 phpStorm 从远程服务器删除文件

    所以我已经将远程服务器添加到 phpStrom 中 我可以在那里更改文件 但是 如果我删除文件 它们只会从我的计算机上消失 而不是在服务器上消失 如何使用 phpStorm 从远程服务器删除文件 To manually从远程位置删除文件 使
  • 使用 PDO 的基于 PHP 类的用户系统 - 调用非对象上的成员函数prepare()

    我做了相当多的研究 故障排除和搜索 试图解决我的问题 但没有运气 所以这是错误 调用非对象上的成员函数prepare 生成此错误的代码位于我的用户 Auth 类中 如下所示 this gt dbManager gt db gt prepar
  • WooCommerce - 谢谢和“我的帐户”查看订单页面上的自定义通知

    在 WooCommerce 上我有一个自定义字段days manufacture对于具有不同 整数 值的每个产品 我还有这个代码 可以在购物车页面上显示一条消息 其中的最高值是 生产天数 add action woocommerce bef
  • laravel/lumen-installer 安装失败:guzzlehttp/guzzle 锁定在 6.3.0

    我正在尝试通过命令安装 Lumencomposer global require laravel lumen installer 但在终端上抛出以下错误 Changed current directory to home lykos con
  • 合并数组而不丢失键索引

    我有两个数组 Menu Navigation var array public nav top array 100 gt Dashboard 200 gt Sell 300 gt Products 400 gt History 500 gt
  • PHP 7.0和MySQL启动错误“未定义符号:mysqlnd_allocator in Unknown”

    即使在运行时 在自定义编译版本的 PHP7 上也会收到此警告php v 尝试了发布的所有解决方案 什么可能导致这种情况 PHP 警告 PHP 启动 无法加载动态库 usr lib php 20151012 pdo mysql so usr
  • 如何通过传递国家代码或国家名称在php中获取时区

    我使用一些 api 有国家代码和国家名称 有什么方法可以在 php ini 中获取给定国家代码和国家名称的时区 我有这样的数据 address Object city continent Asia continent code AS cou
  • 发送蓝色附件

    我尝试发送附件 pdf 文件 我收到电子邮件但没有附件 我尝试过使用https github com sendinblue APIv3 php library blob master docs Model SendSmtpEmail mde
  • PHP 中 glob() 中的转义空格?

    我在 PHP 中有以下函数 除了名称中带有空格的文件外 该函数运行良好 Good picture jpg例如 这里是 function getphotolist currentalbum photos glob currentalbum J
  • 开发 WordPress 管理链接重定向到实时站点

    我正在尝试对我拥有的 WordPress 网站进行新的更改 所以我复制了所有文件并导出到新的开发子域 为子域创建新数据库并从实时站点导入数据库 直播站点 http mysite com http mysite com 开发站点 http d
  • 如何设置 Zend Cache Storage 的过期时间?

    我想在 Zend 文件系统缓存中存储一 些 XML 并让它在 30 分钟后过期 如何设置缓存持续时间 过期时间 我使用 Zend 缓存作为组件 而不是在完整的 ZF2 应用程序的上下文中 cache Zend Cache StorageFa
  • php 的 SCORM 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们为一位客户开发了电子学习网站 最近他询问需要 SCORM feed 我不知道我的系统是否与 scr
  • Symfony - 自定义验证器和依赖注入

    我正在尝试对自定义验证器使用依赖项注入 以便能够使用实体管理器 我遵循 Symfony 示例 依赖注入 http symfony com doc current cookbook validation custom constraint h
  • 让 PHP 脚本永远循环执行队列系统中的计算作业

    目前 我有一个永远在我的服务器上运行的 perl 脚本 检查 SQS 是否有要计算的数据 该脚本已经运行了大约 6 个月 没有出现任何问题 所以 现在我想切换到 PHP 的 CLI 并让脚本永远循环在那里 主要是因为我对PHP比较熟悉 Ba
  • 从 https 切换到 http 时违反 RewriteRule

    我写了很多重写规则 in my htaccess文件 但是当我从https to http页面 它不遵守这些规则 NOTE 本地主机上一切正常 问题出在服务器上 UPDATE 这是我的website http www charityrumm
  • 需要从我的应用程序将文件上传到谷歌文档并存储对上传文件的引用

    我正在开发一个基于谷歌应用程序的基本系统 就像我之前定义的那样 我正在构建一个简单的订购系统 并且对于每个下订单 我都会附加一个文件或文档 我希望能够设置它 以便我上传的任何文件都会上传到谷歌文档中 并且我能够以某种方式从我自己的应用程序维
  • PHP - While/Else 错误? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有以下
  • 通过jquery ajax()和serialize()提交html表单

    我想通过 jquery ajax 提交此表单 这是我所做的 但它不起作用 即表单正在提交并刷新页面 但我没有看到响应 即在同一页面上打印数组 HTML

随机推荐

  • 如何在 JavaScript 中实现函数数组?

    我对 JavaScript 还很陌生 我需要编写一对 20 x 20 矩阵函数 我的所有函数都接受一个数字并返回一个数字 即相同的签名 例如 Myfunctions 1 2 应该返回一对可以在代码中调用的函数 在 Java 中 我通常会实现
  • multiprocessing.Pool.imap_unordered 的内存使用量稳步增长

    我刚刚注意到我的程序在处理大文件时使用越来越多的内存 不过 它一次只处理一行 所以我不明白为什么它会继续使用更多内存 经过大量挖掘 我意识到该程序由三个部分组成 加载数据 一次一行 处理a中的每一行multiprocessing Pool
  • 将元素添加到 xml 文件

    我正在尝试从 C csproj 文件添加和删除元素 该文件的部分内容如下所示 有人可以告诉我如何做以下两件事吗 添加一个元素 如下所示 该行显示 我想添加 这 删除一个元素 例如 假设我想删除 I 行 已在下面指出
  • 应用程序操作:通过动态快捷方式在 Google Assistant 中显示小部件

    考虑到官方文档和代码实验室中显示的选项 我的问题相对简单 但我一直在努力使其工作 我想通过动态快捷方式触发一个小部件在 Google Assistant 中显示 看起来非常简单 但是当实现这样的功能和动态快捷方式时
  • Rails 3 ajax 更新部分在没有页面刷新的情况下不起作用

    我正在开发 Rails 3 购物车 我有一个目录页面 其中显示所有产品 还有一个部分显示购物车的要点 因此 用户添加到购物车的任何产品都会显示在此购物车部分中 现在 这不起作用了 将产品添加到购物车后 我必须点击刷新 否则部分不会更新 这是
  • 如何从不同的活动获取主启动活动的意图?

    我目前正在进行另一项活动 如何获取主启动 Activity 的 Intent Intent launchIntent getIntent 上式中 显然getIntent 不会让我得到正确的Intent我需要的 我怎样才能获得主启动Activ
  • 导出 DLL 中的静态数据

    我有一个 DLL 其中包含一个静态类members I use declspec dllexport 为了利用这个类methods 但是 当我将其链接到另一个项目并尝试编译它时 我收到静态数据的 无法解析的外部符号 错误 例如 在DLL中
  • Python 小版本之间的 Wheel 不兼容性

    我正在 PyPi 上发布一个包 它将支持 Python 3 6 并且希望构建尽可能少的轮子 我读过Python 的轮子包装系统 https packaging python org guides distributing packages
  • javascript函数(输入大于今天日期的日期)

    我是 javascript 的初学者 我需要一个函数来检测用户是否输入日期 并在日期小于今天的日期时提醒他 HTML
  • 将角色混合到可调用对象中

    理论上 你可以在运行时将角色混合到对象中 https docs raku org language objects Mixins of Roles 所以我尝试用一 个函数来做到这一点 my random f gt arg Just arg
  • 使用 JavaScriptSerializer() 反序列化 JSON 文件

    我将反序列化的 json 文件的结构如下所示 id 1lad07 text test url http twitpic com 1lacuz width 220 height 84 size 8722 type png timestamp
  • 如何过滤数据透视表中按多个条件过滤的记录 - laravel eloquent collections

    我正在改建一个图书推荐个人网站 我想通过多个标准来过滤书籍 例如 我想展示所有哲学和科幻小说的书籍 彼得 瓦特的 盲视 就是一个例子 现在我只能做一个标准过滤器 我有一个数据透视表 示范书 public function genres re
  • 如何在没有主键的情况下对表或视图进行休眠映射[重复]

    这个问题在这里已经有答案了 可能的重复 Hibernate与无PK https stackoverflow com questions 767277 hibernate and no pk 有人知道如何在没有主键的情况下对表或视图进行休眠映
  • Autosys 中 ON ICE 和 ON HOLD 作业之间的区别

    搁置工作和冻结工作有什么区别 ON HOLD 和 ON ICE 作业之间有两个显着的区别 这决定了何时使用它们 当 ON HOLD 作业被推迟时 如果满足其启动条件 它将运行 而 ON ICE 作业在放入 OFF ICE 后 即使满足其启动
  • Django 模型的类型注释

    我正在开发一个 Django 项目 由于这是一个新项目 我希望用 python 3 6 类型注释对其进行完全注释 我正在尝试注释模型 但我很难找到一个好的方法 让我们以IntegerField举个例子 我看到有两种注释选择 number 1
  • window.opener.location.href 适用于 IE,但不适用于 Chrome 或 Safari

    我一直在研究这个问题 虽然各个论坛上有很多关于类似问题的帖子 但没有一个问题或解决方案与我的完全匹配 我有一个应用程序 已成功使用下面的函数在完成弹出窗口后重定向回父窗口 最近我一直在调查与其他浏览器的兼容性 允许系统通过iPad使用 发现
  • 从列表理解创建有序字典?

    这是列表理解 https stackoverflow com a 29135851 156458 L k d k v for k v in l iteritems for l in L where L是有序字典的列表 即 collectio
  • 出现错误:对象不支持属性或方法“分配”

    我正在使用这个 jquery 弹出插件从这个链接 https web archive org web 20170808060543 http dixso github io 80 custombox 在我的 WordPress 网站上 它在
  • JNI 在应用程序中检测到错误:调用 JNI NewGlobalRef 时出现未决异常 java.lang.ClassNotFoundException:

    我正在开发 VPN 应用程序并遵循以下代码强天鹅 https github com vmlinz strongswan android应用程序 我已经使用了这个应用程序的代码并且它正在加载 so通过 JNI 文件 我已经从 Strongsw
  • 从 mysql 转变为 mysqli

    我对 PHP 中的 mysqli 接口有点困惑 当我昨天开始将旧的 mysql 代码更改为 mysqli 时 文档引导我走上了这条路 prepare bind params and execute 在我努力处理结果的过程中 我最终编写了自己