PHP에서 PDO 개체를 사용하여 PlanetScale에 연결
3260 단어 planetscalephpwebdevtutorial
플래닛스케일이란 무엇입니까?
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에서 저에게 핑을 보내주세요.
Reference
이 문제에 관하여(PHP에서 PDO 개체를 사용하여 PlanetScale에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/iamluisj/connecting-to-planetscale-with-a-pdo-object-in-php-2h09
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$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();
$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;
}
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에서 저에게 핑을 보내주세요.
Reference
이 문제에 관하여(PHP에서 PDO 개체를 사용하여 PlanetScale에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/iamluisj/connecting-to-planetscale-with-a-pdo-object-in-php-2h09
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$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;
}
Reference
이 문제에 관하여(PHP에서 PDO 개체를 사용하여 PlanetScale에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iamluisj/connecting-to-planetscale-with-a-pdo-object-in-php-2h09텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)