4

リモート Linux マシン上の PHP から Pervasive PSQL データベースにクエリを実行する例を教えてください。

Pervasive は、PHP がアクセスできると主張していますが、彼らの例では Linux では利用できない Windows COM オブジェクトを使用しており、ダウンロード用の最初の「PHP DTO Extensions 1」リンクは、実際には一連の ASP .NET スクリプトへのリンクであり、実際にはそうではありません。 'PHP でさえまったくありません: パーベイシブ PHP の例

4

3 に答える 3

2

サンプルを変更する必要があることをPervasviveに通知します。そこにいくつかの連絡先があります。LinuxボックスからPSQLを使用する場合、使用しているPSQLのバージョンについては言及しませんが、Linux用のPSQLクライアントが必要になります。これは、Linux上のPHP(およびWindows)からPSQLサーバーへの接続をテストするために以前に使用したサンプルです。odbc_connectでは、「デモデータ」はODBCDSN名です。他の2つのパラメーターは、ユーザー名とパスワードです。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>
于 2011-02-12T14:26:56.670 に答える
1

必要なのは PDO 拡張http://nl.php.net/manual/en/pdo.installation.phpだと思います。ODBCをサポートする任意のデータベースに接続できます。

于 2011-02-12T00:29:15.027 に答える
0

Pervasive Server に何かをインストールできる場合は、odbtp を使用してみてください。これは、サーバー上の ODBC ドライバーと、Linux または Windows で実行できるクライアントとの間のブリッジです。ここから取られたphpからのクエリの例は

<?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(); ?>
于 2015-09-21T02:02:27.907 に答える