【问题标题】:PHP MsSQL PDO or APIPHP MsSQL PDO 或 API
【发布时间】:2012-03-31 18:27:15
【问题描述】:

我通常使用 PHP MySQL,因此,我对 MsSQL 的了解有些有限。我即将编写一个类,使我和我的同事更容易执行 MsSQL 查询。然而,在我的研究中,我发现我有两种选择如何连接到 MsSQL 数据库;我可以使用 PHP PDO 库或 SQLSRV API。后者对我来说似乎是更好的选择,因为我不熟悉 PDO 库及其工作原理,不过,如果它是更好的选择,我愿意更多地了解 PDO 库。

如此有效,我只是想知道哪个选项更适合使用 PHP 与 MsSQL 数据库进行通信?

此外,是否有人熟悉提供 API 示例和文档的好网站?微软网站不错,但有些偏颇和局限。

非常感谢任何帮助,谢谢。

【问题讨论】:

    标签: php sql-server sql-server-2008


    【解决方案1】:

    我建议你学习 PDO。

    其中 MySQL(i) 仅适用于 MySQL,SQLSRV API 仅适用于 MsSQL,PDO 适用于大约 20 种不同的数据库引擎。另外,它是面向对象的,并且支持在准备好的语句中命名参数。

    See this great article (it's about PDO vs MySQLi, but the arguments there are valid)

    【讨论】:

    • 这很有帮助,谢谢。在我继续学习如何使用 PDO 库之前,是否有内置方法与一般的 MsSQL 和 MySQL 函数执行相同的操作。例如mysql_real_escape_string?如果不是因为我可以自己编写它们,这不是问题,但它会更好。命名参数有什么好处?
    • @BenCarey 您第二个问题的答案就是您第一个问题的答案!阅读链接文档的安全部分
    • 好吧,假设您想根据用户输入从表中进行选择。在 PDO 中,您可以使用SELECT id FROM table WHERE input = :input,您可以想象拥有的好处,比如说 5 个字段? 10?。您无需记住哪个 ? 与 MySQLi 一样,此外,当您不需要记住字符串/整数的顺序时,您可以更加灵活。
    • @ManseUK 是的,我注意到了! :-)!说实话,这一切都说得通,我相信很多人都觉得它很有帮助,但是,我认为它不适用于我,因为我只是从 HTML 字段中收集数据,使用 PHP 验证它们并插入/更新数据库。如果这不相关,也许我误解了你在说什么。如果是这样,您能否在答案中发布一个小代码示例? :-D
    • @Truth 啊,我现在明白了!搞定了,开始训练吧!最后一件事,您链接到的网站说不要使用引号,但是准备和执行方法都逃避查询吗?
    【解决方案2】:

    如果您要为 SQL 编写包装类,我可以建议类似 Doctrine 的东西。它是一个对象关系映射器(ORM),它使用对象来表示数据库中的记录和一个使用 PDO 的数据库抽象层(DBAL):

    位于强大的 PHP 之上的对象关系映射器 (ORM) 数据库抽象层(DBAL)。它的主要特点之一是 在专有的面向对象的 SQL 中编写数据库查询的选项 受 Hibernates 启发的称为 Doctrine Query Language (DQL) 的方言 高品质。这为开发人员提供了一个强大的 SQL 替代方案, 无需不必要的代码重复即可保持灵活性。

    【讨论】:

    • 感谢您的回答,但出于多种原因,我不喜欢使用第三方库和 API。我尊重 Doctrine 可能很棒,但我更喜欢自己编写课程,因为那时我完全熟悉它们的工作方式。还是谢谢
    【解决方案3】:

    我同意@Truth 的观点,即 PDO 是比 SQLSRV 更便携的 API,因此通常是更好的选择。

    但是,PDO 有一件坏事:据我所知,它总是以“字符串”类型返回数据,而不管原始数据库中的数据类型如何。关于 PDO 为何如此的各种其他 SO 帖子归结为“因为这就是它在 PHP 上的方式”。也许是这样,但它仍然很严重:将日期时间或浮点数作为字符串返回会浪费带宽,降低精度,并且由于小数点和日期格式的差异而引入了国际化问题。呸。

    出于显而易见的原因,我一直计划使用 PDO 驱动程序,但现在我正在研究 SQLSRV 驱动程序,因为它保留了数据类型。

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 2014-02-03
      • 1970-01-01
      • 2013-12-13
      • 2015-07-07
      • 2019-01-11
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多