PHP에서 PDO 개체를 사용하여 PlanetScale에 연결

플래닛스케일이란 무엇입니까?



PlanetScale은 MySQL 호환 서버리스 데이터베이스 플랫폼입니다. 데이터베이스용 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();


제목에 WITH PDO가 표시됩니다!



나는 개인적인 선호로 PDO 객체를 사용하는 것을 선호하는 경향이 있습니다.
SSL과 함께 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 인증 기관에 대한 파일 경로를 설정합니다.



경우에 따라 서버가 실행 중인 OS에 따라 MYSQL_ATTR_SSL_CA를 "/etc/ssl/cert.pem"으로 설정해야 할 수도 있습니다. 확실하지 않은 경우 다음 기능을 사용하는 것이 가장 좋습니다.

openssl_get_cert_locations()['default_cert_file']


또는 실행할 수 있습니다

var_dump(openssl_get_cert_locations());


default_cert_file의 문자열을 보려면.

저처럼 "openssl s_client no cipher match"와 같은 오류가 발생하면 다음 옵션을 설정할 수 있습니다.




    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,


경고



이 옵션을 false로 설정하는 것은 권장되지 않습니다. false로 설정하면 모든 연결이 안전하지 않고 인증서가 확인되지 않기 때문에 중간자 공격에 취약합니다. 이 옵션을 설정하지 않고 연결이 작동하는 경우 기본값이 true이므로 이 속성을 생략하는 것이 좋습니다.

옵션 변수 설정



더 간결하게 하기 위해 옵션 배열에 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;
}


도움이 되었기를 바랍니다. 확인했거나 질문이 있는 경우 아래에 의견을 남기거나 트위터 @helloLuisJ에서 저에게 핑을 보내주세요.

좋은 웹페이지 즐겨찾기