odbc_connect设置DefaultSchema

时间:2012-04-30 11:02:55

标签: php odbc ibm-midrange

我想尝试定义架构以设置库列表,我可以在其中搜索查询sql的表。

在momenti我可以通过这个字符串连接将我的DB2连接到IBMi:

 $user = 'USER';
 $password = 'PWD';
 $hostname = '192.168.1.100';
 $db = 'S6528B5A';
 $conn_string = "DRIVER={iSeries Access ODBC  Driver};
                 SYSTEM=$hostname;
                 PROTOCOL=TCPIP;
                 UID=$user;
                 PWD=$password;
                 DATABASE=$db;
                 DefaultSchema={LIB1,LIB2};";

连接成功建立我获得资源ID#3,但是当我尝试执行sql查询时:

$sql = 'SELECT * FROM FILE1';
$rows = odbc_exec($conn, $sql);

我收到错误的SQL状态S0002,其中找不到文件(就好像在错误的库中搜索文件一样,在库中搜索与打开连接的用户名相同)

如何在第一个连接处设置我的环境而不是执行查询?

1 个答案:

答案 0 :(得分:3)

使用此连接字符串启用系统命名并且不设置默认库:

$conn_string = "DRIVER={iSeries Access ODBC  Driver};
  SYSTEM=$hostname;
  PROTOCOL=TCPIP;
  UID=$user;
  PWD=$password;
  Naming=1;
  DefaultSchema=,LIB1,LIB2;";

Client Access ODBC: Default Libraries Setting

ODBC connection string keywords

相关部分的摘录如下:

使用SQL命名约定,操作系统不会执行库列表搜索以查找非限定对象。如果定义了默认集合,则使用默认集合来解析不合格的SQL语句。

...

使用SYS命名约定,非限定SQL语句将转到默认集合。如果没有默认集合,则使用当前库。如果未指定当前库,则使用库列表。

...

默认收藏

ODBC设置的作业属性,用于确定处理包含非限定SQL名称的SQL语句时使用的库。设置默认集合时,除了过程,函数和类型之外的所有非限定对象都必须驻留在默认集合中,而不管命名约定如何。

...

如何让ODBC搜索库列表?

如上所述,编辑ODBC数据源并将系统命名设置为SYS。默认库必须为空,或者在早于R510的版本上,默认库设置必须以逗号开头,以便不定义默认集合(例如,“,MYLIB1,MYLIB2”)。


Odbc connection string format, not finding files