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 を使用しようとしましたが、 も使用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 を使用する Linux 1.8.1 の XAMPP でテストしたときは発生しませんでした。現在、Apache の代わりに nginx を使用しています。

なにが問題ですか?

4

1 に答える 1

3

PDO を使用して mysql からそれぞれの型の整数と浮動小数点数を取得するには、mysqlnd ベースの PDO-mysql とエミュレーション モードの両方をオフにする必要があります。

于 2013-06-20T12:17:37.220 に答える