代码之家  ›  专栏  ›  技术社区  ›  Keith Palmer Jr.

Linux上PHP的普及ODBC访问?

  •  4
  • Keith Palmer Jr.  · 技术社区  · 14 年前

    普遍声称PHP可以访问它,但他们的示例使用Windows COM对象,这在Linux上是不可用的,他们下载的第一个“PHP DTO Extensions 1”链接实际上链接到一堆ASP.NET脚本,甚至不是PHP: Pervasive PHP Examples

    3 回复  |  直到 14 年前
        1
  •  2
  •   mirtheil    13 年前

    我会让Pervasvive知道他们需要更换样品。我在那里有一些联系人。至于从Linux盒子中使用PSQL,您没有提到您正在使用的PSQL的版本,但是您需要用于Linux的PSQL客户机。这里有一个我以前用来测试Linux(和WIndows)上PHP与PSQL服务器连接的示例。在odbc\u connect中,“Demodata”是odbc DSN名称。另外两个参数是用户名和密码。您需要在PHP中编译(或启用)ODBC。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE>PHP Sample</TITLE>
    </HEAD>
    <BODY>
    <?php
    $conn=odbc_connect("Demodata","","",""); 
    $sql="select * from class";
    $rs=odbc_exec($conn,$sql);  
    echo "<table border=1>\n";
    $numfields = odbc_num_fields($rs);
    for($i=1;$i<=$numfields;$i++){
        $fn=odbc_field_name($rs,$i);
        echo "<th>$fn</th>";
    }
    echo "\n";
    while(odbc_fetch_row($rs)){ 
        echo "<tr>\n";
        for($i=1;$i<=$numfields;$i++){
           $fv=odbc_result($rs,$i);
           echo "<td>$fv</td>";
        }   
        echo "</tr>\n";
    } 
    echo "</table>\n";
    echo "<p>Number of Fields: $numfields</p>\n";
    ?>
    </BODY>
    </HTML>
    
        2
  •  1
  •   Martin de Keijzer    14 年前
        3
  •  0
  •   dreamstoreality    9 年前

    如果你能在普适服务器上安装一些东西,你可以尝试使用odbtp。它是服务器上的ODBC驱动程序和可以在Linux或Windows上运行的客户机之间的桥梁。一个来自php的查询示例 here

    <?php
    
    $con = odbtp_connect( 'odbtp.somewhere.com',
                          'DRIVER={SQL Server};SERVER=myserver;UID=myuid;PWD=mypwd;DATABASE=mydb;' ) or die;
    
    odbtp_set_attr( ODB_ATTR_FULLCOLINFO, TRUE );
    
    $qry = odbtp_query( $_REQUEST['query'] ) or die;
    
    do {
        if( ($msg = odbtp_get_message( $qry )) ) {
            echo "MESSAGE: $msg<p>";
            continue;
        }
        if( ($cols = odbtp_num_fields( $qry )) == 0 ) {
            echo odbtp_affected_rows( $qry );
            echo " rows affected<p>\n";
            continue;
        }
        echo "<table cellpadding=2 cellspacing=0 border=1>\n";
        echo "<tr>";
        for( $col = 0; $col < $cols; $col++ ) {
            echo "<td><nobr> " . odbtp_field_name( $qry, $col );
            echo " (" . odbtp_field_type( $qry, $col ) . ") </nobr></td>";
            if( odbtp_field_bindtype( $qry, $col ) == ODB_DATETIME )
                odbtp_bind_field( $qry, $col, ODB_CHAR );
        }
        echo "</tr>\n";
    
        while( ($rec = odbtp_fetch_array($qry)) ) {
            echo "<tr>";
            for( $col = 0; $col < $cols; $col++ ) {
                if( is_null( $rec[$col] ) ) $rec[$col] = "NULL";
                echo "<td><nobr> $rec[$col] </nobr></td>";
            }
            echo "</tr>\n";
        }
        echo "</table><p>\n";
    
        echo odbtp_affected_rows( $qry );
        echo " rows affected<p>\n";
    }
    while( odbtp_next_result( $qry ) );
    
    odbtp_close(); ?>