9

首先,我知道关于 SO 有各种类似的问题,例如thisthis。但是,当我从表中获取值时,整数总是作为字符串获取。

我正在使用 PHP5.4 (5.4.16-1~dotdeb.1) 和 MYSQL5.5 (5.5.31+dfsg-0+wheezy1)。这里写的是PHP5.4.0默认开启MySQL Native Driver。但我仍然得到字符串值。

我如下初始化一个 PDO 对象。

try {
        $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8';

        $db = new PDO($dsn,DB_USER,DB_PASS);

        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch (PDOException $e) {
        header('HTTP/1.1 500');
        exit;
    } catch (Exception $e) {
        header('HTTP/1.1 500');
        exit;
    }

当我插入时,我尝试使用execute(array(...))format 和 used bindValue(...,PDO::PARAM_INT),但它们没有任何区别。

例如,这是我插入新行的方式。

public function insertList ($db,$account_id,$list_name) {
    $sql = $db->prepare('INSERT INTO lists VALUES (?,?,?,?,?)');

    try {
        // $sql->execute(array($list_name,0,0,0,$account_id));

        $sql->bindValue(1,$list_name,PDO::PARAM_STR);
        $sql->bindValue(2,0,PDO::PARAM_INT);
        $sql->bindValue(3,0,PDO::PARAM_INT);
        $sql->bindValue(4,0,PDO::PARAM_INT);
        $sql->bindValue(5,$account_id,PDO::PARAM_INT);
        $sql->execute();
    } catch (PDOException $e) {
        header('HTTP/1.1 500');
        exit;
    } catch (Exception $e) {
        header('HTTP/1.1 500');
        exit;
    }
}

这是我从表中获取行的方法

public function fetchLists ($db,$account_id) {
    $sql = $db->prepare('SELECT * FROM lists WHERE account_id=?');

    try {
        $sql->execute(array($account_id));

        $result = $sql->fetchAll(PDO::FETCH_ASSOC);
    } catch (PDOException $e) {
        header('HTTP/1.1 500');
        exit;
    } catch (Exception $e) {
        header('HTTP/1.1 500');
        exit;
    }

    return $result;
}

当我在使用 PHP5.4.7 的 XAMPP for Linux 1.8.1 上进行测试时,没有发生这种情况。我目前使用 nginx 而不是 Apache。

怎么了?

4

1 回答 1

3

要从带有 PDO 的 mysql 中获取具有各自类型的整数和浮点数,您需要同时关闭基于 mysqlnd 的 PDO-mysql 和仿真模式。

于 2013-06-20T12:17:37.220 回答