It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。
PDO::PARAM_BOOL
    (int)
   PDO::PARAM_NULL
    (int)
   PDO::PARAM_INT
    (int)
   PDO::PARAM_STR
    (int)
   PDO::PARAM_STR_NATL
    (int)
   PDO::PARAM_STR_CHAR
    (int)
   PDO::PARAM_LOB
    (int)
   PDO::PARAM_STMT
    (int)
   PDO::PARAM_INPUT_OUTPUT
    (int)
   PDO::FETCH_DEFAULT
    (int)
   PDO::FETCH_LAZY
    (int)
   PDO::FETCH_LAZY は、アクセスされたものと同じ名前のプロパティ名を作成する PDORow オブジェクトを返します。
     PDOStatement::fetchAll() の中では使えません。
    
   PDO::FETCH_ASSOC
    (int)
   PDO::FETCH_ASSOC はカラム名毎に 1 つの値のみ返します。
    
   PDO::FETCH_NAMED
    (int)
   PDO::FETCH_NAMED はカラム名毎に値の配列を返します。
    
   PDO::FETCH_NUM
    (int)
   PDO::FETCH_BOTH
    (int)
   PDO::FETCH_OBJ
    (int)
   PDO::FETCH_BOUND
    (int)
   PDO::FETCH_COLUMN
    (int)
   PDO::FETCH_CLASS
    (int)
   注意: 結果セットのカラムをクラスのプロパティにマップしつつ、 オブジェクトは初期化されます。 この処理はコンストラクタをコールするまえに行われるので、 プロパティのアクセス権に関係なく、たとえ
readonlyとしてマークされていてもプロパティの値を集めることができます。 クラスにプロパティが存在しない場合は、マジックメソッド __set() が存在すればコールされます。 マジックメソッドが存在しない場合、public プロパティが動的に作成されます。 しかしながら、PDO::FETCH_PROPS_LATEが指定されている場合は、プロパティの値を集める 前 にコンストラクタがコールされます。
PDO::FETCH_INTO
    (int)
   PDO::FETCH_FUNC
    (int)
   PDO::FETCH_GROUP
    (int)
   PDO::FETCH_COLUMN あるいは
     PDO::FETCH_KEY_PAIR と組み合わせます。
    
   PDO::FETCH_UNIQUE
    (int)
   PDO::FETCH_KEY_PAIR
    (int)
   PDO::FETCH_CLASSTYPE
    (int)
   PDO::FETCH_SERIALIZE
    (int)
   PDO::FETCH_INTO と同様ですが、
     シリアライズした文字列としてオブジェクトを提供します。
     このフラグを設定した場合はコンストラクタが呼ばれません。
     PHP 8.1.0 以降は、この定数は推奨されなくなりました。
    
   PDO::FETCH_PROPS_LATE
    (int)
   PDO::ATTR_AUTOCOMMIT
    (int)
   false の場合、PDO は接続がトランザクションを開始できるように
     オートコミットを無効にしようとします。
    
   PDO::ATTR_PREFETCH
    (int)
   PDO::ATTR_TIMEOUT
    (int)
   PDO::ATTR_ERRMODE
    (int)
   PDO::ATTR_SERVER_VERSION
    (int)
   PDO::ATTR_CLIENT_VERSION
    (int)
   PDO::ATTR_SERVER_INFO
    (int)
   PDO::ATTR_CONNECTION_STATUS
    (int)
   PDO::ATTR_CASE
    (int)
   PDO::CASE_* 定数で指定されたケースにカラム名を変更します。
    
   PDO::ATTR_CURSOR_NAME
    (int)
   PDO::ATTR_CURSOR
    (int)
   PDO::ATTR_DRIVER_NAME
    (int)
   
例1 PDO::ATTR_DRIVER_NAME の使用例
<?php
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
  echo "mysql 上で動作しています。何か mysql 固有のことをここで行います\n";
}
?>PDO::ATTR_ORACLE_NULLS
    (int)
   PDO::ATTR_PERSISTENT
    (int)
   PDO::ATTR_STATEMENT_CLASS
    (int)
   PDO::ATTR_FETCH_CATALOG_NAMES
    (int)
   PDO::ATTR_FETCH_TABLE_NAMES
    (int)
   PDO::ATTR_STRINGIFY_FETCHES
    (int)
   null を除く) を強制的に文字列として扱います。
     PDO::ATTR_ORACLE_NULLS を
     PDO::NULL_TO_STRING に設定しない限り、
     null は変更されません。
    
   PDO::ATTR_MAX_COLUMN_LEN
    (int)
   PDO::ATTR_DEFAULT_FETCH_MODE
    (int)
   PDO::ATTR_EMULATE_PREPARES
    (int)
   PDO::ATTR_DEFAULT_STR_PARAM
    (int)
   PDO::PARAM_STR_NATL
     と PDO::PARAM_STR_CHAR のうち、いずれかひとつを選べます。
    
    
     PHP 7.2.0 以降で利用可能です。
    
   PDO::ERRMODE_SILENT
    (int)
   PDO::ERRMODE_WARNING
    (int)
   E_WARNING メッセージを発行します。
    
   PDO::ERRMODE_EXCEPTION
    (int)
   PDO::CASE_NATURAL
    (int)
   PDO::CASE_LOWER
    (int)
   PDO::CASE_UPPER
    (int)
   PDO::NULL_NATURAL
    (int)
   PDO::NULL_EMPTY_STRING
    (int)
   PDO::NULL_TO_STRING
    (int)
   PDO::FETCH_ORI_NEXT
    (int)
   PDO::FETCH_ORI_PRIOR
    (int)
   PDO::FETCH_ORI_FIRST
    (int)
   PDO::FETCH_ORI_LAST
    (int)
   PDO::FETCH_ORI_ABS
    (int)
   PDO::FETCH_ORI_REL
    (int)
   PDO::CURSOR_FWDONLY
    (int)
   PDO::CURSOR_SCROLL
    (int)
   PDO::FETCH_ORI_* 定数を指定して
     ください。
    
   PDO::ERR_CANT_MAP
     (int)
   PDO::ERR_SYNTAX
     (int)
   PDO::ERR_CONSTRAINT
     (int)
   PDO::ERR_NOT_FOUND
     (int)
   PDO::ERR_ALREADY_EXISTS
     (int)
   PDO::ERR_NOT_IMPLEMENTED
     (int)
   PDO::ERR_MISMATCH
     (int)
   PDO::ERR_TRUNCATED
     (int)
   PDO::ERR_DISCONNECTED
     (int)
   PDO::ERR_NO_PERM
     (int)
   PDO::ERR_NONE
    (string)
   PDO::PARAM_EVT_ALLOC
    (int)
   PDO::PARAM_EVT_FREE
    (int)
   PDO::PARAM_EVT_EXEC_PRE
    (int)
   PDO::PARAM_EVT_EXEC_POST
    (int)
   PDO::PARAM_EVT_FETCH_PRE
    (int)
   PDO::PARAM_EVT_FETCH_POST
    (int)
   PDO::PARAM_EVT_NORMALIZE
    (int)
   PDO::SQLITE_DETERMINISTIC
    (int)
   It should be noted that PDO::FETCH_CLASS will call the constructor *after* setting the values (or calling __set).PDO::PARAM_STR_CHAR and PDO::PARAM_STR_NATL must be combined with PDO::PARAM_STR using bitwise-OR for parameter binding.
These flags control value quoting (e.g. PDO::quote) and, in some situations (see below), parameter binding  (e.g. PDO::bindParam, PDO::bindValue) to prefix string literals with N'' as defined in SQL-92.  As of PHP 7.3, only dblib and mysql support these flags.  For the mysql driver, the flags only affect parameter binding when PDO::ATTR_EMULATE_PREPARES is true (the default).
MySQL and MariaDB interpret string literals prefixed with N as being utf8 (not utf8mb4) regardless of `SET NAMES` or the charset parameter.  This can cause problems if the database/table/column charset is not utf8.  For example, in a database using utf8mb4, the query "SELECT * FROM table WHERE col = :param" and bindValue(":param", "\u{1F600}", PDO::PARAM_STR | PDO::PARAM_STR_NATL) will cause "PDOException: SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='".  Using PDO::PARAM_STR without PDO::PARAM_STR_NATL and ensuring the charset DSN parameter is set correctly can avoid this issue.
See:
https://wiki.php.net/rfc/extended-string-types-for-pdo
https://mariadb.com/kb/en/library/string-literals/
https://dev.mysql.com/doc/refman/8.0/en/string-literals.htmlDefault value for \PDO::ATTR_TIMEOUT is 30 seconds.
Ref.: https://github.com/php/php-src/blob/PHP-7.1.0/ext/pdo_mysql/mysql_driver.c#L600PDO::FETCH_UNIQUE not only fetches the unique values, it also uses the first SQL column as array key result, what is very useful for create quickly an index, eg :
<?php
$sql = <<<SQL
    SELECT ALL
        c1, -- For result indexing
        c1, c2
    FROM (
        VALUES
            ROW('ID-1', 'Value 1'),
            ROW('ID-2', 'Value 2a'),
            ROW('ID-2', 'Value 2b'),
            ROW('ID-3', 'Value 3')
    ) AS t (c1, c2);
    SQL;
$result = $pdo->query($sql);
print_r($result->fetchAll(PDO::FETCH_UNIQUE));
/*
Gives :
ID-1 => [c1 => ID-1,  c2 => Value 1]
ID-2 => [c1 => ID-2b, c2 => Value 2b]
ID-3 => [c1 => ID-3,  c2 => Value 3]
*/
?>Reference to all the PDO::MYSQL_* constants is available in MySQL's documentation for the driver here: https://dev.mysql.com/doc/connectors/en/apis-php-pdo-mysql.html
Such as the ones I was looking for PDO::MYSQL_ATTR_SSL_CA and PDO::MYSQL_ATTR_SSL_CAPATH which are not listed on this page.To bind a float, use PDO::PARAM_STR with bindValue. You can skip the PDO::PARAM_STR because it's the default option. Binding with bindParam will change the type of the bound variable to a string, which can lead to type errors.