2011-10-21 9 views
2

私は例として、次の文を使用します。異なる結果タイプ

<?php 
    $link = mysql_connect('127.0.0.1', 'user', 'pass'); 
    mysql_query('SET @a = "test";', $link); 
    $r = mysql_query('SELECT @a;', $link); 
    echo mysql_field_type($r,0); 
?> 

私は、MySQL 5.0でこれを実行すると、出力は「文字列」です。 これをMySQL 5.1で実行すると、出力は "blob"になります。

これはバグですか?または、この動作を変更する設定がありますか?私のextarnalアプリケーションは文字列を期待していて、今この新しい結果型で失敗します。うまくいけば、誰かがこれで私を助けることができます。 5.0ドキュメントによると、理由として

+0

ドキュメントによると、これはあまりにも奇妙ではありません。 – Johan

+0

実際には: http://dev.mysql.com/doc/refman/5.1/en/user-variables.htmlに記載されています。ユーザー変数の値が結果セットで選択されている場合は、その変数に戻りますクライアントを文字列として返します。それで今のように塊ではありません。あなたの回避策は – Marco

答えて

0

ない本当の答えが、回避策

$r = mysql_query('SELECT CAST(@a AS VARCHAR(255)) as outcome;', $link); 

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

ユーザー変数の値は、結果セットに選択されている場合は、それを文字列としてクライアントに返されます。

5.1,5.5および5.6のドキュメントはまったく同じです。

+0

Tnxです。 私はクライアントとしてDelphiを使用しています。これは非常に大きな回避策です。修正があった方が良いでしょう。 – Marco

+0

@Marco、両方のDelphiがSQLを受け入れるので、SQLを変更すると何が問題になりますか? TTableの代わりにDelphiでTQueryを使用するだけです。 – Johan