问题标签 [pdo]
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 - mysqli 或 PDO - 有什么优点和缺点?
取而代之的是,我们在使用 mysqli 和 PDO 来处理诸如准备好的语句和事务支持之类的东西之间进行划分。有些项目使用一个,有些项目使用另一个。我们几乎不可能迁移到另一个 RDBMS。
我更喜欢 PDO 的唯一原因是它允许为准备好的语句命名参数,而据我所知 mysqli 不允许。
当我们整合我们的项目以仅使用一种方法时,选择其中一种作为标准是否还有其他优点和缺点?
pdo - 持久的数据库连接——是还是不是?
我在项目中使用 PHP 的 PDO 层进行数据访问,我一直在阅读它,发现它对持久性数据库连接具有良好的先天支持。我想知道何时/是否应该使用它们。我会在重 CRUD 的应用程序中看到性能优势吗?是否有缺点需要考虑,可能与安全性有关?
如果这对您很重要,我使用的是 MySQL 5.x。
php - 使用 SQL 查询时,对我的网站进行分页的最有效方法是什么?
我正在尝试对 SQL 查询的结果进行分页以在网页上使用。语言和数据库后端是 PHP 和 SQLite。
我正在使用的代码是这样的(页码从 0 开始)
http://example.com/table?page=0
还有比这更有效的分页方法吗?
使用当前方法可以看到的一个问题是,在开始显示它们之前,我必须将所有 10 个(或许多)结果存储在内存中。我这样做是因为 PDO 不保证行数可用。
发出COUNT(*)
查询以了解存在多少行,然后将结果流式传输到浏览器是否更有效?
这是“它取决于你的表的大小,以及count(*)
查询是否需要在数据库后端进行全表扫描”,“做一些分析自己”之类的问题之一吗?
php - 准备好的语句如何工作?
我正在编写一些数据库例程,并且正在使用准备好的语句。我的环境是带有 PHP5 的 PDO。
我理解准备好的语句主要提供性能优势,以及一些辅助奖励,例如不必手动 SQL 转义输入数据。
我的问题是关于性能部分。
我在下面有两个 getPrice 函数的实现,它接受一个产品 id 并返回它的价格。
getPrice_A 在同一脚本执行中的后续调用中重用相同的 PDOStatement 对象。这是必要的还是推荐的?如果是这样,有没有办法避免在每个模型中的每个 get*() 中重复这个额外的代码?
getPrice_B 在每次调用时都会创建一个新的 PDOStatement 对象。DBMS 是否会认识到该语句已经准备好并且仍然可以跳过一些工作?换句话说,这个实现是否正确地利用了准备好的语句的性能优势?
写完所有这些并仔细阅读后,我想 getPrice_B 很好,而 getPrice_A 提供的好处可以忽略不计,这可能值得也可能不值得额外的复杂性。
不过,我仍然希望从更有知识的人那里得到肯定的消息。
假设$pdo
在下面的示例中它是一个有效的连接 PDO 对象。
php - 如何在 PDO 中使用绑定参数进行模糊搜索?
试图做这样的事情...
...但是在 PDO 中使用绑定参数来准备语句。例如:
我已经尝试了许多单引号和 % 符号的排列,这让我很反感。
我似乎记得以前在某个时候与这个摔跤,但我找不到任何参考资料。有谁知道如何(如果?)在 PDO 中使用命名参数很好地做到这一点?
php - SQLite/PHP 只读?
我一直在尝试将 SQLite 与 PHP 中的 PDO 包装器一起使用,但效果好坏参半。我可以很好地从数据库中读取,但是当我在浏览器中查看页面时,我的更新都没有提交到数据库中。奇怪的是,从我的 shell 运行脚本确实会更新数据库。我怀疑文件权限是罪魁祸首,但即使数据库提供完全访问权限(chmod 777),问题仍然存在。我应该尝试更改文件所有者吗?如果是这样,该怎么办?
顺便说一句,我的机器是标准的 Mac OS X Leopard 安装并激活了 PHP。
@汤姆马丁
感谢你的回复。我刚刚运行了您的代码,看起来 PHP 以用户 _www 运行。然后我尝试将数据库由_www拥有,但这也不起作用。
我还应该注意 PDO 的 errorInfo 函数并不表示发生了错误。这可能是 PDO 的设置以某种方式打开数据库以进行只读吗?我听说 SQLite 对整个文件执行写锁定。数据库是否有可能被阻止写入的其他东西锁定?
我决定包含有问题的代码。这将或多或少将格兰特的脚本移植到 PHP。到目前为止,它只是问题部分:
eclipse - 在 Mac 上为 PostgreSQL 安装 PDO 驱动程序(使用 Zend for eclipse)
如何让 PDO 在我的 mac (os x 10.5) 上工作?我在 Zend/Eclipse 中使用内置的 php 和 php。似乎根本找不到有用的驱动程序。
php - PDO 准备好的语句是否足以防止 SQL 注入?
假设我有这样的代码:
PDO 文档说:
准备好的语句的参数不需要引用;司机为您处理。
这真的是我需要做的一切来避免 SQL 注入吗?真的那么容易吗?
如果它有所作为,您可以假设 MySQL。另外,我真的只是对使用准备好的语句来对抗 SQL 注入感到好奇。在这种情况下,我不关心 XSS 或其他可能的漏洞。
php - PHP中的bindParam覆盖错误
这有点奇怪,我很可能完全错误地编写了这个代码 - 因此我在两天内两次在脚本的完全不同部分遇到了相同的错误。我正在使用的代码如下:
我对使用 PDO 很陌生,但基本上我正在尝试传递一系列约束,例如
返回表中的所有行p>如果我使用这个数组,则从第一个执行的 SQL
—正如我所料。绑定参数打印“Binding active to 1”和“Binding name to James”——完全符合预期。这些行存在于数据库中,但第二个用 $results 不输出任何内容 - 即不返回任何行。如果我传递单个约束的数组,例如
这工作得很好。似乎只要通过了多个约束,它就会停止工作。php - 如何在 PHP 中通过 PDO 循环遍历 MySQL 查询?
我正在慢慢地将我的所有功能LAMP websites
从mysql_
功能转移到PDO
功能,并且我已经碰到了我的第一堵砖墙。我不知道如何使用参数循环遍历结果。我对以下内容很好:
但是,如果我想做这样的事情:
显然,“其他东西”将是动态的。