首页 > 解决方案 > 代码未从配置数据库表返回值

问题描述

(如果此问题发布在不当或非最佳场所,我提前道歉。)

我正在尝试将下表中的数据库模式的版本号与 version.php 中的 $oc_db_version 的版本号进行比较。

DROP TABLE IF EXISTS `oc_config`;
CREATE TABLE `oc_config` (
  `key` varchar(80) NOT NULL,
  `value` varchar(80) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT;

INSERT INTO `oc_config` (`key`, `value`) VALUES
('api_key', 'pzPgYOO7vz1WxgfD5913BMp5RYX8wpZPdp2KN5pdx78MRscT2X65zrmgfBQXCpQG'),
('oc_db_version',   '999');

我似乎无法让它工作。我要么得到“PDOStatement 无法转换为 int”的效果,要么得到 bool(true)。下面是我当前使用的代码。

   try{
        $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
    } catch(PDOException $ex)
    {
        $_SESSION['error'] = "Could not connect -> ".$ex->getMessage();
        $_SESSION['error_blob'] = $ex;
        header('Location: '.BASE_URL.'/oc-content/plugins/error/index.php');
        die();
    }

    $stmt = $pdo->query("SELECT value FROM ".DB_PREFIX."config WHERE `key` = 'oc_db_version'");
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    if (!$result['value'])
    {
        header('Location: '.BASE_URL.'/oc-content/plugins/error/index.php');
        die();
    }

    if ( $result['value'] != $oc_db_version || $result['value'] > $oc_db_version )
    {
          die("Database version mimatch. Please upgrade.");
    }
    else{ 
        // Do Nothing
    };
    $pdo = null;

我意识到上面的代码可以用来重构,有些人可能会畏缩阅读它,为此我深表歉意。我只是想让它工作。

标签: php

解决方案


推荐阅读