[PHP-users 2131] Re: about 「signal Segmentation fault (11)」

HIRANO Nobuaki php-users@php.gr.jp
Tue, 18 Sep 2001 11:10:02 +0900


平野です。

大垣様ありがとうございます。
少し考えるヒントができました。

さらにいろいろ調べてみたところ、DBに
3つの行、3つの列を参照していると言いましたが、
列の中にROWIDというカラムがありました。
ROWIDは「timestamp」で「not null」です。
値は「0x0000000101787ec4」といった値が入ります。

timestamp型とは(Sybaseで)?

サーバ構築時に定義されるユーザ・データ型。timestamp型のカラム
はテーブルに1つだけ含めることができます。timestamp型のカラム
は非常に特殊な動きをします。まず、ユーザはローを追加するときに
timestamp型カラムの値を指定することはできません。このカラムには
データベースで一意のタイムスタンプ値が入ります。そして、ローが
更新されると自動的に値が変ります。また、timestampという名前の
カラムはデータ型を指定しなくても自動的にtimestamp型になります。
timestamp型のベースになっているのはvarbinary(8)です。

というようなものです。


PHPを--enable-debugでビルドしてエラーログを確認してみました。
Sybase関数のsybase_queryを使用する時に出ていることがわかり、
SELECT文をいろいろ検証してみました。
*をやめて、それぞれのカラム名を指定して、ROWIDだけを省いた形と
入れた形で動作を検証すると、入れたときには以下のようなエラーが出ました。
省くとエラーはでません。

−−−−−−−−−−−−−−−−−−−−−−−−−

[Tue Sep 18 10:30:57 2001]  Script:  '/usr/local/apache/www/test.php'
---------------------------------------
zend_execute_API.c(261) : Block 0x0811EA88 status:
zend_variables.c(62) : Actual location (location was relayed)
Beginning:      OK (allocated on php_sybase_db.c:673, 9 bytes)
      End:      Overflown (magic=0x37383700 instead of 0x2A8FCC84)
                At least 4 bytes overflown
---------------------------------------
[Tue Sep 18 10:30:57 2001]  Script:  '/usr/local/apache/www/test.php'
---------------------------------------
zend_execute_API.c(261) : Block 0x0811EDA8 status:
zend_variables.c(62) : Actual location (location was relayed)
Beginning:      OK (allocated on php_sybase_db.c:673, 9 bytes)
      End:      Overflown (magic=0x37383700 instead of 0x2A8FCC84)
                At least 4 bytes overflown
---------------------------------------
[Tue Sep 18 10:30:57 2001]  Script:  '/usr/local/apache/www/test.php'
---------------------------------------
zend_execute_API.c(261) : Block 0x0811F0C8 status:
zend_variables.c(62) : Actual location (location was relayed)
Beginning:      OK (allocated on php_sybase_db.c:673, 9 bytes)
      End:      Overflown (magic=0x37383700 instead of 0x2A8FCC84)
                At least 4 bytes overflown
---------------------------------------
php_sybase_db.c(673) :  Freeing 0x0811F0EC (9 bytes),
script=/usr/local/apache/w
ww/test.php
Last leak repeated 2 times

−−−−−−−−−−−−−−−−−−−−−−−−−

どうも、timestamp型を取得するときにエラーになるようです。

一応の原因が特定できたので調べてみます。
ありがとうございました。

また、もしよろしければ、
PHPとSYBASE(他のDBではわかりませんが)の連携をされた方で、
timestamp型の取得時にエラーになるといった経験をされた方
いらっしゃいますでしょうか?

そのあたりの情報がございましたらご教授願いたいと思います。

失礼致します。


平野
hirano@star.kyoto-su.ac.jp