【问题标题】:Using PDO and MySql instead of mysqli [duplicate]使用 PDO 和 MySql 代替 mysqli [重复]
【发布时间】:2016-04-28 21:30:19
【问题描述】:

我开始使用PDOMySQL 而不是mysqli。 所以,我尝试定义这个简单的函数:

public function getIntro($table) {
            $stmt = $this->db->prepare("SELECT * FROM $table ORDER BY rand() LIMIT ?");
            $stmt->execute(array(6));
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }

但是,这样做时,函数返回一个空数组。考虑到与db的连接正常,错误在哪里?

谢谢

【问题讨论】:

  • 您是否检查了$stmt->rowCount 以查看是否有任何行匹配?空数组 = 没有可用的行。
  • 使用参数rowCount为0,使用不带参数查询rowCount> 0。所以,错误在于使用参数,但我可以理解如何使用它
  • 然后检查 $stmt->errorInfo() 是否有任何问题。

标签: php mysql mysqli pdo


【解决方案1】:

试试这个:

public function getIntro($table) {
        $stmt = $this->db->prepare("SELECT * FROM $table ORDER BY rand() LIMIT ?");
        $stmt->bindValue(1, 6);
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

或者这个:

public function getIntro($table) {
            $stmt = $this->db->prepare("SELECT * FROM $table ORDER BY rand() LIMIT :limit");
            $stmt->execute(array(':limit' => 6));
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }

【讨论】:

  • 很遗憾,这两种解决方案都不起作用...
  • @user2520969 尝试删除ORDER BY 部分。试试这个查询:SELECT * FROM $table LIMIT ?
  • 不,不会改变
  • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
  • @user2520969 尝试对查询中的数字 6 进行硬编码,完全没有绑定,看看是否能解决问题。如果确实如此,则显然与LIMIT 有关
猜你喜欢
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2015-06-17
  • 2011-06-26
  • 1970-01-01
  • 2020-02-19
  • 2019-10-09
相关资源
最近更新 更多