PHPでPDOオブジェクトを持つPlantScaleへの接続


PlanetScaleとは


PlanetScaleは、MySQL互換のServerlessデータベースプラットフォームです.私はそれをデータベースのgithubと考えます.データベースをホストしたり、ブランチを作成したり、変更をマージすることができます.

それでは、PHPを使ってどうやって接続するのですか?


PlanetScaleデータベースへの接続方法はmysqli ()クラスを使用することです.
$mysqli = mysqli_init();
$mysqli->ssl_set(NULL, NULL, "/etc/ssl/cert.pem", NULL, NULL);
$mysqli->real_connect($_ENV["HOST"], $_ENV["USERNAME"], $_ENV["PASSWORD"], $_ENV["DATABASE"]);
$mysqli->close();

タイトルはPDOと言う!


私は個人的な好みとしてPDOのオブジェクトを使用して好む傾向がある.
PDOを使ってPDOを使うことは、ハンドルをインスタンス化する際に追加のオプションを設定する必要があります.
$dsn = 'mysql:host=$host;dbname=$database;port=3306';
$user = "";
$dbP = "";
$options = array(
    PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/ca-certificates.crt'
);
try {
    $db = new PDO($dsn, $user, $dbP, $options);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch (PDOException $error) {
    $msg = $error->getMessage();
    echo $msg;
}

我々がSSLをオンにするのに用いられるオプションを壊しましょう


    PDO::MYSQL_ATTR_SSL_CA => 'path_to_cert.pem',

これは、SSL証明書権限にファイルパスを設定します


場合によっては、MySQLRAGE ATTRUNE SLSLUNE CAはサーバが動作しているOSに応じて/etc/ssl/cert . pemに設定する必要があります.この機能を使用することが確実でない場合は、最善の賭けをしてください.
openssl_get_cert_locations()['default_cert_file']
あるいは、あなたは走ることができます
var_dump(openssl_get_cert_locations());
defaulttle certchenファイルの文字列を参照してください.

私がしたように「OpenSSL SHERクライアントの暗号マッチ」のようなエラーになった場合は、以下のオプションを設定してみてください。


    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,

警告


このオプションをfalseに設定することは推奨されません.これをfalseに設定すると、証明書が検証されていないので、どんな接続も安全で、中間攻撃中の人に影響を受けやすいことになります.接続がこのオプションを設定せずに動作する場合は、この属性を省略することを推奨します.

設定オプション変数


より簡潔にするために、私はオプション配列のint値を使いたいです.だから私のオプションはこのようになります.それはあなたが上で見るものに等しいです.
$options = array(
    1009 => "/etc/ssl/cert.pem",
    1014 => false,
);

最後のコードスニペット


ここで私はPHPのアプリをplanetscaleに接続するために使用します.
$dsn = 'mysql:host=$hostURL;dbname=$databaseName;port=3306';
$user = "";
$dbP = "";
$options = array(
    1009 => "/etc/ssl/cert.pem",
    1014 => false,
);
try {
    $db = new PDO($dsn, $user, $dbP, $options);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch (PDOException $error) {
    $msg = $error->getMessage();
    echo "error:".$msg;
}
私はあなたがこの役に立つ発見!あなたがしたか、あなたが質問をするならば、以下のコメントを落としてください