1

私は PHP が初めてで、SQL と PHP に関するチュートリアルを見て、それらのファイルを作成しました。

insert_news.php:

    require_once __DIR__ .'/db_connect.php';

    $sql = "INSERT INTO news ( descriere, data, autor) VALUES (?, ?, ?)" ;
    $params = array("The description", "12/11/2011", "COsmin");


    $serverName = "my server";
    $connectionInfo = array( "Database"=>"myusername", "UID"=>"myusername", "PWD"=>"mypassword");

    $conn = sqlsrv_connect($serverName, $connectionInfo );
    $stmt = sqlsrv_query( $conn , $sql, $params );

    if( $stmt == false ) {
        echo("NOT");
        die( print_r( sqlsrv_errors(), true));
    }

?>

このコードはうまく機能しているようです。

今私の問題は、データベースへの接続をより簡単にするクラスを作りたかったということです。それがコードです:

db_connect.php

<?php
class DB_CONNECT {
    function __construct(){
        $this->connect();
    }

    function __Destruct(){
        $this->close();
    }

    function connect() {
        $serverName = "my server";
        $connectionInfo = array( "Database"=>"my db", "UID"=>"my user", "PWD"=>"my pass" );

        $con = sqlsrv_connect($serverName, $connectionInfo );
                return $con;
    }
    function close(){
        sqlsrv_close();
    }
}
?>

そして、insert_new.php ファイルからこのクラスを次のように呼び出したい場合:

    <?php

    require_once __DIR__ .'/db_connect.php';

    $sql = "INSERT INTO Stiri ( descriere, data, autor) VALUES (?, ?, ?)" ;
    $params = array("ASta e o stvnmbvire aduagata printr-un web service php", "12/11/2011", "COsn");

    $conn = new DB_CONNECT() ;
    $stmt = sqlsrv_query( $conn , $sql, $params );

    if( $stmt == false ) {
        echo("NU");
        die( print_r( sqlsrv_errors(), true));
    }
?>

これを試すと、サーバーから次のように返されます。

警告: sqlsrv_query() は、パラメーター 1 がリソースであり、9 行目の C:\xampp\htdocs\android_connect\insert_news.php で指定されたオブジェクトであると想定しています NUArray ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [コード] => -14 [2] => 無効なパラメーターが sqlsrv_query に渡されました. [メッセージ] => 無効なパラメーターが sqlsrv_query に渡されました. ) )

私は XAMPP を使用して php ファイルをコンパイルし、データベースは SQL Server 2005 であることを述べます...私の愚かなことであなたの時間を無駄にしてしまったら申し訳ありません...

4

2 に答える 2

1

DB インスタンスの代わりに関数 sqlsrv_query にカスタム オブジェクトを渡しています。クラスでは、次のように $con 変数を public 属性にする必要があります。

class DB_CONNECT {
    public $con = false;
    function __construct(){
        $this->connect();
    }

    function __Destruct(){
        $this->close();
    }

    function connect() {
        $serverName = "my server";
        $connectionInfo = array( "Database"=>"my db", "UID"=>"my user", "PWD"=>"my pass" );

        $this->con = sqlsrv_connect($serverName, $connectionInfo );
                return $con;
    }
    function close(){
        sqlsrv_close();
    }
}

この属性を次のようにクエリ関数に与えます。

if($conn->con) {
   $stmt = sqlsrv_query( $conn->con , $sql, $params );
} else {
   // error
}
于 2013-07-01T19:21:47.543 に答える
1

実際にDBに接続していないようです。

これはあなたの問題です

$conn = new DB_CONNECT();
$stmt = sqlsrv_query( $conn , $sql, $params );

$connここでは接続ではなく、単なる DB_CONNECT オブジェクトです。connect()接続を取得するには、メソッドを呼び出す必要があります。だからこれを試してください:

$conn = new DB_CONNECT();
$stmt = sqlsrv_query( $conn->connect() , $sql, $params );
于 2013-07-01T19:23:38.817 に答える