ホームページ  >  記事  >  バックエンド開発  >  PDO 接続データ クラスと中国語文字化けの解決策_PHP チュートリアル

PDO 接続データ クラスと中国語文字化けの解決策_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:05:44926ブラウズ

1.pdo の紹介
pdo (php チュートリアル データ オブジェクト) は php 5 で追加されたものです。これは php 5 で追加された主要な新機能です。php 5 より前では、php4/php3 は各データベースに接続して処理するための一連のデータベース チュートリアル拡張機能 (php_mysql) でした。 tutorial.dll、php_pgsql.dll、php_mssql.dll、php_sqlite.dll など。
php6 では、デフォルトで pdo が接続に使用され、mysql 拡張機能が補助として使用されます
2.pdo 設定
php.ini で、「extension=php_pdo.dll」の前の「;」を削除し、データベースに接続する場合は、pdo に関連するデータベース拡張子の「;」も削除する必要があります。次に、Apache サーバーを再起動します。
拡張子=php_pdo.dll
拡張子=php_pdo_mysql.dll
拡張子=php_pdo_pgsql.dll
拡張子=php_pdo_sqlite.dll
拡張子=php_pdo_mssql.dll
拡張子=php_pdo_odbc.dll
拡張子=php_pdo_firebird.dll
...
3.pdo は mysql データベースに接続します
新しい pdo("mysql:host=localhost;dbname=db_demo","root",""); デフォルトでは長い接続ではありません。データベースへの長い接続を使用したい場合は、最後に次のパラメーターを追加する必要があります:
新しい pdo("mysql:host=localhost;dbname=db_demo","root","","array(pdo::attr_persistent => true) "); 4. 一般的に使用される PDO メソッドとそのアプリケーション
pdo::query() は主に、記録された結果を返す操作、特に選択操作に使用されます
pdo::exec() は主に、挿入、更新などの結果セットを返さない操作に使用されます。
pdo::lastinsertid() は最後の挿入操作を返します。主キー列の型は最後の自動インクリメント ID です
pdostatement::fetch() はレコードを取得するために使用されます
pdostatement::fetchall() は、すべてのレコードを 1 つにまとめることです
5. PDOはmysqlデータベースインスタンスを操作します

コードをコピーします コードは次のとおりです:


$pdo = 新しい pdo("mysql:host=localhost;dbname=db_demo","root",""); if($pdo -> exec("db_demo(name,content) に挿入 value('title','content')")){

エコー「挿入成功!」
エコー $pdo -> }
?>



コードをコピーします。コードは次のとおりです:

$pdo = 新しい pdo("mysql:host=localhost;dbname=db_demo","root",""); $rs = $pdo -> クエリ("テストから * を選択"); while($row = $rs -> fetch()){

print_r($行); }

?>




中国語の文字化け表示を解決するためにインターネット上で最もよく見られるコードは次のとおりです:

最初のもの: pdo::__construct($dsn, $user, $pass, array

(pdo::mysql_attr_init_command => "名前を設定'utf8';"));

最初の方法を試しましたが、結果は、名前フィールドには「c」文字のみが表示されます。その後、中国語が表示されるはずの場所が空白になります。 結果は次のようになります: 図 1 に示すとおりです

これを解決する必要があるのは、utf8 を gbk に直接置き換えることだけです。つまり、

pdo::__construct($dsn, $user, $pass, array(pdo::mysql_attr_init_command => "set

名前'gbk';"));

レンダリング 2 は次のとおりです:

2 番目のタイプ: pdo::__construct($dsn, $user, $pass);

pdo::exec("名前を設定 'utf8';");

私の環境で 2 番目の方法もテストしました。表示効果を図 1 に示します。この場合、utf8 を gbk に置き換えると表示されます。
が表示されました。なお、ここでの pdo:: は $pdo-> に置き換えて使用します。 もちろんこれは変数であり、変数名は自分で定義できます。

3番目のタイプ


:$pdo->query('set names utf8;');

3 番目のタイプについては、上記の 2 つを読んだ後、utf8 を gbk に置き換える必要があることがわかり、正しく表示できるようになります。
これらすべてをテストしました。どちらにしても。ははは。また、中国語の文字化けを解決する方法もこちらで紹介していますが、似たような感じです

基本的に、このメソッドはクエリではなく実行を使用することを除いて、3 番目のメソッドと違いはありません。コードは次のとおりです。

$pdo->exec("文字セット gbk を設定");

/*

一般的なデータベース操作: 追加、削除、変更、クエリ、単一レコードまたは複数レコードの取得、最後に挿入されたレコード ID の返し、操作レコードの行数の返しなど。 */
/*

パラメータの説明

int $debug デバッグを有効にするかどうか、有効にした場合、SQL ステートメントが出力されます

int $getcount カウントするかどうか、戻り値は行数です

int $getrow 単一レコードを返すかどうか

string $table データベーステーブル

string $fields クエリ対象のデータベースフィールド。空にすることができます。デフォルトではすべてを検索します
string $sqlwhere クエリ条件、空も許可されます
文字列 $orderby 並べ替え、空にすることができ、デフォルトは逆順の ID になります

*/

function hrselect($debug, $getcount, $getrow, $table, $fields="*", $sqlwhere="", $orderby="id desc"){
グローバル $pdo
if($debug){
if($getcount){
echo "select count(*) from $table where 1=1 $sqlwhere order by $orderby"; }その他{
echo "select $fields from $table where 1=1 $sqlwhere order by $orderby"; }
出る
}その他{
if($getcount){
$rs = $pdo->query("select count(*) from $table where 1=1 $sqlwhere order by $orderby"); $rs->fetchcolumn() を返す
}elseif($getrow){
$rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby"); $rs->fetch() を返す
}その他{
$rs = $pdo->query("select $fields from $table where 1=1 $sqlwhere order by $orderby"); $rs->fetchall() を返す
}
}
}
/*
パラメータの説明
int $debug デバッグを有効にするかどうか、有効にした場合、SQL ステートメントが出力されます
int $execrow は、有効になっている場合、実行エントリの数を返します
int $lastinsertid 最後に挿入されたレコード ID を返すことを有効にするかどうか
string $table データベーステーブル
string $fields データベースに挿入する必要があるフィールド
string $values データベースに挿入する必要がある情報は、$fields と 1 対 1 で対応する必要があります
*/
関数 hrinsert($debug, $execrow, $lastinsertid, $table, $fields, $values){
グローバル $pdo
if($debug){
echo "$table ($fields) 値 ($values) に挿入"; 出る
}エルセイフ($execrow){
return $pdo->exec("$table ($fields) 値 ($values) に挿入"); }elseif($lastinsertid){
return $pdo->lastinsertid("$table ($fields) 値 ($values) に挿入"); }その他{
$pdo->query("$table ($fields) 値 ($values) に挿入"); }
}
/*
パラメータの説明
int $debug デバッグを有効にするかどうか、有効にした場合、SQL ステートメントが出力されます
int $execrow 実行を有効にしてエントリ数を返すかどうか
string $table データベーステーブル
string $set 更新するフィールドとコンテンツ、形式: a='abc',b=2,c='2010-10-10 10:10:10'
string $sqlwhere 条件を変更して空にすることを許可します
*/
関数 hrupdate($debug, $execrow, $table, $set, $sqlwhere=""){
グローバル $pdo
if($debug){
echo "$table set $set where 1=1 $sqlwhere を更新します
"; 出る
}エルセイフ($execrow){
return $pdo->exec("update $table set $set where 1=1 $sqlwhere"); }その他{
$pdo->query("update $table set $set where 1=1 $sqlwhere"); }
}
/*
パラメータの説明
int $debug デバッグを有効にするかどうか、有効にした場合、SQL ステートメントが出力されます
int $execrow は、有効になっている場合、実行エントリの数を返します
string $table データベーステーブル
string $sqlwhere 削除条件、空でも可
*/
関数 hrdelete($debug, $execrow, $table, $sqlwhere=""){
グローバル $pdo
if($debug){
echo "$table where 1=1 $sqlwhere から削除"; 出る
}エルセイフ($execrow){
return $pdo->exec("1=1 $sqlwhere の $table から削除"); }その他{
$pdo->query("1=1 $sqlwhere の $table から削除"); }
}
?>




http://www.bkjia.com/PHPjc/630758.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/630758.html

技術記事
1. pdo の概要 pdo (php チュートリアル データ オブジェクト) は、php 5 で追加されたものです。php 5 で追加された主要な新機能です。php 5 より前では、php4/php3 はすべて、従うべきデータベース チュートリアル拡張機能の束であったためです。 .

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。