みなさんはじめまして、
1年ほど前にPHP+MySQLのプログラムを習い始めたばかりで
至らないところがあると思います。
未熟ながら頑張っていくのでご指摘頂ければありがたいです。
前提・実現したいこと
題名にもある通り、PHPでPDOを使いMySQLに接続し、
bit(1)を取得しようと考えています。
bitを使う理由はTure/falseとして使いたいからです。
PHPで取得したint型やbit型を含んだ連想配列を取得してから
smartyのif文でbitの値を確認して、表を表示しても良いかかどうかを判断しています
発生している問題・エラーメッセージ
Windowsの環境のもと、xamppを使用してローカルテストをした所。
MySQLのbit型を含んだTableは正常に取得出来ました。
次に
レンタルしたxserverでPHPの動作確認したところ、
Tableは取得したようなのですが、
{$Table|@var_dump}で確認したところ
int型(11)やtime型やvarchar(20) utf8_general_ci 型の列は取得できているが
bit型の列だけ正しく取得出来ていないようです。
試したこと
ローカルのxamppでPHPを動かしローカルのMySQLデータベースに接続して動作確認
→正常に出力された。
ローカルのxamppでPHPを動かしてxserverではない所にあるレンタルしたMySQLデータベースに接続して動作確認。
→正常に出力された。
xserverでPHPを動かしてxserverではない所にあるレンタルしたMySQLデータベースに接続して動作確認。
→bit型だけ取得できていないようにみえる。
var_dumpで確認した所、bitの値が0のときは空白で1のときは文字化けしたものが出力された。
PHPでbit型の列を抜き取り、全て(int)で型変換して@var_dumpで確認。
→ローカルは正常に出力されたが、xserverのみ出力結果が全て0になっていた。
ネット上で「MySQLのBIT型を、PHPで使うにはhexdec(bit型)を使えばいい」とあったので動作確認。
→ローカルは正常に出力されたが、xserverのみ出力結果が全て0になっていた。
MySQLのbit型(1)をint型(1)に変えてローカルとレンタル環境で試す。
→どちらの環境も全て正常に出力された。
ちなみにどの作業でもsmartyのif文は
{if $Table.bit }
{if $Table.bit eq 1 }
{if {$Table.bit} eq 1 }
{if {$Table.bit|escape} eq 1 }などでbit型が取得できて動いているか一通り試しています
補足情報(FW/ツールのバージョンなど)
XAMPP Version: 7.3.10
NetBeans IDE 11.1
ひと通り試した結果、
xserverのOSがLinuxだからもしかすると何か習得方法が違うのかな?と思ったのですが
ネットで「Linux bit型 PHP MySQL」「bit型 PHP 取得」など調べてみましたが、これといって解決方法が載っていませんでした。
どなたかわかる方がおられましたら、どうか教えて頂ければありがたいです。

回答2件
あなたの回答
tips
プレビュー