Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2011-02-08 12:40:02

kotorisan
メンバー
登録日: 2007-01-17
投稿: 49

Re: 3.62のPDOハンドラエラー

現段階で
対応しているプラグインなどの問題でPDOを使っている方はいないと思います。

必要な方はいないとは思いますが、
PDOの場合、実行できずに止まるようなので、修正は、以下のようになります。

誤動作の原因になるので、
sql_get_server_info($MYSQL_CONN) の引数は必要なさそうです。

また、設定を $MYSQL_HANDLER = array('pdo','mysql');
にした場合、mysql_set_charset関数は使えないので
PDOには、そのような関数はない?ので、(詳しく調べていないのでわかりませんけど)
SQLで実行が必要です。

パッチです。

--- NucleusCMS_3.62_Release/nucleus/libs/globalfunctions.php	2011-02-02 19:46:44.000000000 +0900
+++ NucleusCMS_3.62_Release/nucleus/libs/globalfunctions.php	2011-02-08 09:41:05.593750000 +0900
@@ -429,8 +429,8 @@
 			$charset  = $fetchDat['Value'];
 			break;
 	}
-	$mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info($MYSQL_CONN))));
-	if ($mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) {
+	$mySqlVer = implode('.', array_map('intval', explode('.', sql_get_server_info())));
+	if ($MYSQL_CONN && $mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) {
 		mysql_set_charset($charset);
 	} elseif ($mySqlVer >= '4.1.0') {
 		sql_query("SET CHARACTER SET " . $charset);

nucleus/libs/pdo.php
の最初で$MYSQL_CONNは、整数(0)

$SQL_DBHはクラスのインスタンスなので
古いコードが混在していて誤って$MYSQL_CONNを渡した場合、エラーで実行がとまります。
is_nullでは、誤判定します。たくさんあるようです

・if (is_null($dbh)) を if (!is_object($dbh))

・if (is_null($dbh)) を if (!$dbh)
みたいにした方がいいと思います。
これは、本家に修正依頼をしたほうがいいと思います

オフライン

#2 2011-02-09 11:38:15

きゃしゃ
メンバー
From: 北河内
登録日: 2007-12-15
投稿: 351

Re: 3.62のPDOハンドラエラー

ありがとうございます。
ごめんなさい、白状します。PDOでのチェック漏れてました :oops:
ADMIN.phpではsql_get_server_info()引数なしでやってますね。
んで、$MYSQL_CONNをPDOかどうかのフラグとして活用する、と。
pdo.phpの中でもmysql判定してSET CHARACTER SETしてますから、
やっぱり_set_charsetのラッパー関数つくるべきかも。

オフライン

#3 2011-02-09 16:54:08

kotorisan
メンバー
登録日: 2007-01-17
投稿: 49

Re: 3.62のPDOハンドラエラー

きゃしゃ さんの発言:

pdo.phpの中でもmysql判定してSET CHARACTER SETしてますから、
やっぱり_set_charsetのラッパー関数つくるべきかも。

sql_set_charset関数を追加すれば、いいかもしれないですね big_smile
PDO.phpのほうは、将来のことを考えるとデータベースのクラス(PDO_MYSQL)確認が必要になると思います。

SQLインジェクションが起きないように
あらかじめ用意したもの以外は、無視するようにしてしまえば
問題ないと思います


それでついでなので 調べてみました。

PDO作成時なら
コンストラクタで
PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/path to/my.cnf'

my.cnf
[client]
  default-character-set=utf8

みたいな感じで 設定できるらしいのですが
PDO自体には実装されていないようです。

オフライン

#4 2011-03-22 23:43:08

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: 3.62のPDOハンドラエラー

Mocchiです。

dbのcharset提案と合わせて、関数「sql_set_charset_jp」を日本語版の開発ソースにコミットしました。リビジョン1181です。

http://sourceforge.jp/projects/nucleus- ... ision=1181

きゃしゃさん、kotorisan、お疲れ様でした。

オフライン

Board footer