PHP PDO MySQLでセレクトした数値結果から判別するプログラムで、=== で厳密型チェックしてる場合、MySQLがTINYINTのフィールドを読み込む際、環境によって(Windows or Linux, PHP7 or PHP8)はうまく読み込めなくなったのでキャストしてみると解決しました。
< コード例 >
SQL
$SQL = <<<EOM SELECT IS_MAILHTML FROM m_user_aviation WHERE ID = :USERID EOM;
これはだめ
// パラメータセット // $stmt = $dbh->prepare($SQL); $stmt->bindvalue(':USERID', $userid, PDO::PARAM_STR); $stmt->execute(); // 格納 // //$array = array(); $mailtype= ""; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { //var_dump ($row["IS_MAILHTML"]) ; $mailtype = $row["IS_MAILHTML"] === 1 ? "html" : "text"; }
これでオーケー
// パラメータセット // $stmt = $dbh->prepare($SQL); $stmt->bindvalue(':USERID', $userid, PDO::PARAM_STR); $stmt->execute(); // 格納 // //$array = array(); $mailtype= ""; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { //var_dump ($row["IS_MAILHTML"]) ; $mailtype = (int)$row["IS_MAILHTML"] === 1 ? "html" : "text"; // 必ずintにキャスト }
|