PHP PDO : charset, set names?
PHPPHP PDO : charset, set names?
나는 이전의 나의 일반적인 mysql_ * 연결에서 이것을 가지고 있었다 :
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
PDO에 필요합니까? 그리고 나는 그것을 어디서 가져야합니까?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
해결법
-
==============================
1.연결 문자열에 다음과 같이 입력합니다.
연결 문자열에 다음과 같이 입력합니다.
"mysql:host=$host;dbname=$db;charset=utf8"
그러나 PHP 5.3.6 이전에는 charset 옵션이 무시되었습니다. 이전 버전의 PHP를 실행하는 경우 다음과 같이해야합니다.
$dbh = new PDO("mysql:$connstr", $user, $password); $dbh->exec("set names utf8");
-
==============================
2.PHP 5.3.6 이전에는 charset 옵션이 무시되었습니다. 이전 버전의 PHP를 실행하는 경우 다음과 같이해야합니다.
PHP 5.3.6 이전에는 charset 옵션이 무시되었습니다. 이전 버전의 PHP를 실행하는 경우 다음과 같이해야합니다.
<?php $dbh = new PDO("mysql:$connstr", $user, $password); $dbh -> exec("set names utf8"); ?>
-
==============================
3.이것은 아마도 가장 우아한 방법 일 것입니다. PDO 생성자 호출에서 오른쪽이지만 (위에서 언급 한 것처럼) 버그가있는 charset 옵션을 사용하지 마십시오.
이것은 아마도 가장 우아한 방법 일 것입니다. PDO 생성자 호출에서 오른쪽이지만 (위에서 언급 한 것처럼) 버그가있는 charset 옵션을 사용하지 마십시오.
$connect = new PDO( "mysql:host=$host;dbname=$db", $user, $pass, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" ) );
나를 위해 위대한 작품.
-
==============================
4.완성을 위해 실제로 PDO에서 MySQL에 연결할 때 인코딩을 설정하는 세 가지 방법과 PHP 버전에 따라 사용할 수있는 인코딩 방법이 있습니다. 우선 순위는 다음과 같습니다.
완성을 위해 실제로 PDO에서 MySQL에 연결할 때 인코딩을 설정하는 세 가지 방법과 PHP 버전에 따라 사용할 수있는 인코딩 방법이 있습니다. 우선 순위는 다음과 같습니다.
이 샘플 코드는이 세 가지를 모두 구현합니다.
<?php define('DB_HOST', 'localhost'); define('DB_SCHEMA', 'test'); define('DB_USER', 'test'); define('DB_PASSWORD', 'test'); define('DB_ENCODING', 'utf8'); $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA; $options = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ); if( version_compare(PHP_VERSION, '5.3.6', '<') ){ if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){ $options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING; } }else{ $dsn .= ';charset=' . DB_ENCODING; } $conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options); if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){ $sql = 'SET NAMES ' . DB_ENCODING; $conn->exec($sql); }
세 가지를 모두하는 것은 아마도 과잉 공격 일 것입니다 (배포하거나 재사용 할 클래스를 작성하지 않는 한).
-
==============================
5.필자는 데이터베이스가 COLLATE utf8_general_ci 또는 사용할 데이터 정렬로 생성되었는지 확인해야한다는 점을 추가하기를 원합니다. 그렇지 않으면 의도하지 않은 데이터 정렬로 끝날 수 있습니다.
필자는 데이터베이스가 COLLATE utf8_general_ci 또는 사용할 데이터 정렬로 생성되었는지 확인해야한다는 점을 추가하기를 원합니다. 그렇지 않으면 의도하지 않은 데이터 정렬로 끝날 수 있습니다.
phpmyadmin에서 데이터베이스를 클릭하고 작업을 선택하여 데이터 정렬을 볼 수 있습니다. 데이터베이스와 다른 데이터 정렬로 테이블을 만들면 테이블이 데이터베이스 정렬로 끝나게됩니다.
따라서 테이블을 만들기 전에 데이터베이스의 데이터 정렬이 올바른지 확인하십시오. 희망이 사람을 몇 시간 롤 저장
-
==============================
6.DSN의 charset 옵션이 실제로 무시되므로 추가 쿼리가 필요하다고 생각합니다. 다른 답변의 댓글에 게시 된 링크를 참조하십시오.
DSN의 charset 옵션이 실제로 무시되므로 추가 쿼리가 필요하다고 생각합니다. 다른 답변의 댓글에 게시 된 링크를 참조하십시오.
Drupal 7이 http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__construct/7에서 어떻게 작동하는지 살펴 봅니다.
// Force MySQL to use the UTF-8 character set. Also set the collation, if a // certain one has been set; otherwise, MySQL defaults to 'utf8_general_ci' // for UTF-8. if (!empty($connection_options['collation'])) { $this->exec('SET NAMES utf8 COLLATE ' . $connection_options['collation']); } else { $this->exec('SET NAMES utf8'); }
-
==============================
7.이 코드를 테스트하고
이 코드를 테스트하고
$db=new PDO('mysql:host=localhost;dbname=cwDB','root','', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $sql="select * from products "; $stmt=$db->prepare($sql); $stmt->execute(); while($result=$stmt->fetch(PDO::FETCH_ASSOC)){ $id=$result['id']; }
-
==============================
8.
$conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
-
==============================
9.
$con=""; $MODE=""; $dbhost = "localhost"; $dbuser = "root"; $dbpassword = ""; $database = "name"; $con = new PDO ( "mysql:host=$dbhost;dbname=$database", "$dbuser", "$dbpassword", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $con->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
-
==============================
10.$ con = new PDO ( "mysql : host = $ dbhost; dbname = $ database; charset = $ encoding", "$ dbuser", "$ dbpassword");
$ con = new PDO ( "mysql : host = $ dbhost; dbname = $ database; charset = $ encoding", "$ dbuser", "$ dbpassword");
from https://stackoverflow.com/questions/4361459/php-pdo-charset-set-names by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
MVC와 비슷한 페이지에서 예쁜 URL을 기반으로 클래스를로드하는 방법은 무엇입니까? (0) | 2018.09.09 |
---|---|
HTML 태그를 일반 텍스트로 표시하는 방법 (0) | 2018.09.09 |
PHP에서 두 문자열 간의 차이점 강조하기 (0) | 2018.09.09 |
Base64 데이터 문자열에서 서버 측 PNG 이미지를 저장하는 방법 (0) | 2018.09.08 |
악용 가능한 PHP 함수 (0) | 2018.09.08 |