PDO取代了mysqli

时间:2013-08-20 04:00:20

标签: php pdo

我确信我需要迁移到PDO并且正在努力实现。到目前为止我有两个问题......

(1)使用准备好的陈述是否合适?如果我只是想从表中列出一组或多个记录并且该表上只有一个查询,该怎么办?准备好的语句是否会减慢第一个查询的速度?

(2)假设我有一个包含10个字段的表格。我可以声明一个只有六个字段然后使用PDO :: FETCH_CLASS,“foo”的类,其中“foo”是我的缩写类吗?

2 个答案:

答案 0 :(得分:3)

差异被认为可以忽略不计。真。没有人报告过由准备好的陈述引起的性能问题(尽管真的使用它们的人数太少,不只是告诉别人使用它们,但无论如何)。

IF 这个想象中的问题仍然会给你带来太多麻烦,PDO有一个仿真模式,当没有真正的准备工作并且只执行了一次数据库往返时,好像根本没有使用预备语句。同样安全。

所以 - 是的,总是使用预备语句。只是养成一个习惯。

我发现FETCH_CLASS这种愚蠢的语法糖很无用,而且我自己从未使用过它。但是,如果您要求允许懒惰并使用*而不是手动列出所有六个必填字段 - 为什么不试试看?

关于图块的说明: 虽然没有技术上的理由来替换 mysqli (因为这个改进的 mysql库被认为和PDO一样好),但是,因为您很可能会使用原始API调用应用程序代码,PDO确实是更好的替代旧的mysql ext

答案 1 :(得分:2)

  1. 我认为尽可能优先考虑准备好的陈述是好的做法。我在我公司的交通繁忙项目(*)中使用了PDO,我们发现像require_once这样的调用比PDO查询更有问题(至少在我们的架构中)。

    < / LI>
  2. 是的,但无论如何其他4个字段都可用。例如:

  3. class Foo {
        private $col1;
        private $col2;
    
        public static function findAll()
        {
            $pdo = new PDO(...);
            $query = $pdo->prepare('SELECT * FROM foo');
            $query->execute();
            return $query->fetchAll(PDO::FETCH_CLASS, 'Foo');
        }
    }
    
    print_r(Foo::findAll());
    

    class Foo { private $col1; private $col2; public static function findAll() { $pdo = new PDO(...); $query = $pdo->prepare('SELECT * FROM foo'); $query->execute(); return $query->fetchAll(PDO::FETCH_CLASS, 'Foo'); } } print_r(Foo::findAll());

    假设表'foo'有列col1,col2,col3和col4,那么上面的代码将导致:

    • 只是为了给你一些看法:这是一个简单的全州在线选举,在大众传媒车辆中被宣布,持续了大约40个小时。我们的州有800多万活跃选民,但投票不到100万。