前回「この続きは改めて」と書いたやつです。
Azure FunctionにてPDOでSSLを使って接続すると下図のようなエラーを吐いて、接続に失敗しました。ちなみに、ローカルでテストした時には問題なく接続できたんですよね。
んで、色々悩んだわけです。なんせ、エラーメッセージがおかしいですから。なぜ接続に失敗したのかが書かれてないので手がかりなしという状況ですからねぇ。もちろん、これではGoogle先生も全く役に立ちません。
ちなみに接続部分のコードはこんな感じ。
$pdo = new PDO('mysql:host=[トンネルの入り口];port=[入り口のポート番号];dbname=' . $payment_db . ';charset=utf8;', $payment_user, $payment_pw, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_SSL_CA => 'key/mysql-ssl-ca-cert.pem'));
ローカルでテストした時には問題なかったので、このコードに誤りがあるわけではないんですよね。でも、Azure Functionsにプッシュして実行するとエラーになる。
悩みに悩んだ結果、「ひょっとしてAzure FunctionsのPHPのバージョンに問題あるのでは?」と思い立って、アプリケーションの設定で調べてみるとPHPのバージョンは5.6でした。そこで、試しに5.5に変えて実行すると…
接続に成功しました!なんと、PHPのバージョンの問題でした。5.6のPDO周りにバグがあるんですかねぇ。
で、この後で改めてローカルのPHPのバージョンを調べたら5.5でした。要するに「バージョンは揃えておけよ!」って話だったというオチです。はい。
コメント