アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPの関数「mysql_field_len」で、わからない点がありました。

$id = mysql_list_fields ( 'DbName', 'TableName' );
$num = mysql_num_fields ( $id );

for ( $i=0; $i<$num; $i++ ) {
print mysql_field_name ( $id, $i ) ."<BR>\n";
print mysql_field_len ( $id, $i ) ."<BR>\n";
print mysql_field_type ( $id, $i ) ."<BR>\n";
print mysql_field_flags ( $id, $i ) ."<BR><BR>\n";
}

として、各フィールドの情報を表示させました。

すると、mysql_field_typeが「string」(実際にはvarchar)の時、
mysql_field_lenの返す値が3倍になって返ってきます。
例:varchar(8)→24

これは何の値を返しているのか、また設定の問題なのか、
ご存知の方はいらっしゃいますでしょうか。

よろしくお願いいたします。

環境:
PHP4.3.10
MySQL4.1.10

A 回答 (2件)

自分も同様の症状を経験しました。



原因ですが、

PHPはMySQLサーバーと、libmysqlclient.soを使って通信するようで。
もし、MySQLサーバーがloalhostではなく別のサーバーにある場合で、ローカルのlibmysqlclient.soを提供しいるMySQLのバージョンと、サーバー側のMySQLのバージョンが違う(自分の場合は、クライアント側が3系でサーバー側が4.1系でした)と、このような症状がおきました。

クライアント側のlibmysqlclient.soの方のバージョンをあげたら治りました。
    • good
    • 0

mysql_field_lenはフィールドのデータ長ですから、varchar(8)であれば8と表示されるはずです。

同じスクリプトをちゃちゃちゃっと動かしてみましたが、うちでは正しい値が表示されました。

こちらはMySQL4.0.21、php4.3.10、OSはturbo linux8です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!