问题标签 [pdostatement]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 计算查询中的行数
我在我的工作页面中分离了这个功能。
我在这个函数中真正想做的是计算查询结果的行数,但我不知道该怎么做,也不知道如何返回值。
php - 可捕获的致命错误:stdClass 类的对象无法转换为字符串
我不明白,因为我收到“无法转换为字符串”
php - 具有扩展 PDOStatement 的 PDO 在设置为 NULL 时无法断开连接
在 PHP 5.5.22 和 5.5.25 中测试
当使用扩展了 PDOStatement 的 PDO 时,MySQL 会保持连接,直到 PHP 脚本完成。
我可以在 MySQL 查询中看到越来越多的堆叠“睡眠”进程。最后,MySQL 抛出错误“连接太多”。
如果没有 setAttribute about PDO::ATTR_STATEMENT_CLASS
,则 MySQL 连接按工作顺序断开。
我不知道这是一个错误还是有其他解决方案。
php - 将整数转换为Excel列(字母或字母组合)-完整的例子PHP,单元测试和解释
假设我们有一个像这样的函数,它接受一个 PDOStatement(任何查询)并自动生成一个 excel 文件(使用 PHPExcel 库):
我们想使用该convertNumberToExcelCol
函数将整数值转换为 excel 列。
让我们先解释一下这种构建excel文件的方法,下一篇文章将解释获取列的算法。
这些方法作为参数:
- ErrorMessage : 用于返回错误信息
- source : 包含要推送到 excel 文件的数据
- Rows:用于返回导出的数据行数
- name : 给 excel 文件的名称
- columnName:与人类可读的列名(或翻译)一起使用的可选数组。如果省略,则该方法使用查询中的字段名称。
第一行用于初始化参数(PHP 使用松散类型,所以我们必须小心参数)。
此函数确保名称具有有效的名称/扩展名:
然后我们打开到excel文件的连接:
此函数确保列名数组的长度与行数组中的字段数相同。
两者validateFileExtention
和validateColumnNameArray
都适用于具有 CSV 创建功能的共享代码:
如果它是我们添加到 excel 文件中的第一行,那么我们设置基本格式:
使用 getStyle 方法,我们将标题行设置为粗体和 12 大小。
getCOlumnDimension 方法用于设置自动调整大小,因此用户在打开文件时不必自己调整列的大小。
循环的其余部分是将数据从行数组传输到 excel 文件。
在循环之后,我们关闭连接并取消设置用于管理 Excel 的变量。
然后是错误管理:
消息存储在数据库中,因此我们可以向用户提供翻译的消息。我在消息中使用了通用的 [TYPE] 和 [NAME] 标记,我将其替换为正确的文件类型和文件名。
这使我可以在我生成的 excel 和 CSV 文件(或任何类型的文件)中重复使用此通用消息。
如果创建的文件为空,我将其删除。此操作是可选的,但我喜欢在完成后立即从磁盘中清除未使用的文件。
另一种方法是使用函数清除存储目录:
我个人仅在午夜执行源文件和数据库的自动备份过程时才使用此方法。在白天运行它会增加删除其他用户使用的文件的机会。
这就是为什么我正在考虑最佳实践,即通过浏览器将文件发送给用户后立即删除文件,并将清理方法仅用于维护目的。
如果没有错误,我将行数减一,因为我不想计算标题行。如果您将标题行视为数据行,则可以删除该行。
最后,这些方法返回访问新创建文件的路径:
但前提是没有错误。因此,如果函数返回一个空字符串,则意味着发生了错误。
PHP 类型松散,您可以返回任何内容,包括布尔值甚至错误消息,但我更喜欢始终返回相同的数据类型以保持不变。我个人最喜欢的方法是布尔返回值和通过引用传递的错误消息变量。所以我可以使用这样的代码:
这样,错误由类方法在内部进行管理,并且可以根据视图上下文调整成功消息。布尔返回值用于确定我们是否必须显示错误或成功消息。
注意:单元测试将包含在我的答案中。
来自蒙特利尔的 Jonathan Parent-Lévesque
php - 数据插入成功,但 execute() 返回 false
我在这里搜索了我的问题的答案。有些人可能已经在这里回答了其他版本或驱动程序。这个答案对我的发展有很大帮助。
我PDOStatement::prepare()
的回归真实。但我的PDOStatement::execute();
回报是假的。
然而,这些行已成功插入数据库中。我在 php.net 以及 PDO 文档中搜索了该问题。我的搜索进行得很顺利。
我的简单插入代码如下:
除了上述信息之外,我还检查了我尝试插入的每一列的数据类型。一切看起来都很好。回答这个问题真的对我有很大帮助。
更新
我正在调试上面的代码,我试图改变以获得错误。我已将代码更改如下:
结果如下:
php - How can I make sure my query inserts a new row?
Here is my query:
I'm trying to understand that query inserts a new row or not? How can I determine it?
Note: I'm not using execute()
in this case.
postgresql - 无法使用 PDO 序列化
我收到一个关于无法序列化 PDO 实例的错误,但我不知道这意味着什么,而且谷歌搜索并没有帮助我理解。我建立了一个 PostgreSQL 'ON CONFLICT' 类型语句,然后我这样做:
内部服务器错误:您无法序列化或反序列化 PDOStatement 实例
php - foreach循环php中的PDOStatement
有以下代码:
代码按预期工作,但我不明白它背后的逻辑。
我在 php.net 上读过,它PDO::query()
返回一个PDOStatement
对象作为结果集。所以理论上,这部分:$db->query("SELECT * FROM names")
是一个PDOStatement
对象。
如何foreach
循环遍历一个PDOStatement
对象?它是否将PDOStatement
对象转换为关联数组?为什么这部分不是:$db->query("SELECT * FROM names") as $row
给出错误?
php - 带有 func_get_args 的 PHP 函数将元组插入 MySQL
我用 func_get_args 创建了一个 PHP 函数来将数据插入 MySQL。第一个参数是表,然后是字段和值。它仅适用于 3 个参数,但不适用于更多参数。
php - 是否有 PDOStatement“已执行”标志?
是否有类似PDOStatement
(PDOStatement)的“已执行”标志来查看语句是否已执行(通过调用PDOStatement::execute()
)?还是我被迫设置自己的标志?
从文档来看,似乎没有标志(唯一记录在案的属性是$queryString
) - 但我想在手动操作之前我仍然会问。主要是为了区分准备好的和已经执行的语句。