0

私は通常の方法で接続します:

$dbh = ibase_connect($host, $username, $password) OR die("could not connect");

次に、クエリを実行します。

ibase_query($dbh, 'ALTER TABLE USERS ADD OLDUSERPASS VARCHAR(32) COLLATE NONE') or die(ibase_errmsg());

この直後に実行します:

ibase_query($dbh, 'UPDATE USERS SET OLDUSERPASS = USERPASS') or die(ibase_errmsg());

それは不平を言う:

Column unknown OLDUSERPASS At line 1

しかし、DBを見ると、列が作成されています。そのため、何らかの理由で ALTER を実行した直後に、クエリは実際にはサーバーにコミットされません。

理由はありますか?

4

2 に答える 2

3

) を試して ibase_commit($dbhから、ステートメントを変更してください

于 2013-08-01T14:33:19.943 に答える
2

Firebird では、DDL はトランザクション制御下にあり、同じトランザクション内で新しく作成されたオブジェクト (テーブル、列など) を使用することはできません。そのため、そのオブジェクトを使用するクエリを実行する前に、まずコミットする必要があります。

于 2013-08-01T14:47:34.153 に答える