调用连接到 SQL 服务器的函数时出错

埃利奥·费尔南德斯

我正进入(状态

致命错误:在第 27 行调用 C:...\test.php 中的非对象上的成员函数 query()

调用后callQuery2

<?php
    dbConnect();
    callQuery1();
    callQuery2();

    function callQuery1(){
        // SQL query
        $q = "SELECT * FROM table1 WHERE name like 'john%' ";

        // Execute query
        $data1 = exeQuery($q);  
    }

    function callQuery2(){
        // SQL query
        $q = "SELECT * FROM table2 WHERE event = 'holiday' ";

        // Execute query
        $data2 = exeQuery($q);  
    }

    // Execute SQL Query
    function exeQuery($qry) {
        global $pdo;

    ####### LINE 27 #######
        $stmt = $pdo->query($qry);

        if($stmt = $pdo->prepare($qry)) {
            $stmt->execute();
            $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $stmt->closeCursor();       
            return $data;
        }
    }

    // database connection
    function dbConnect(){

        $DBSERVER = "***";
        $DBUSER   = "***";
        $DBPASS   = "***";
        $DBNAME   = "***";

        // OBDC
        try {       
            $pdo = new PDO("odbc:DRIVER={SQL Server};Server={$DBSERVER};Database={$DBNAME}", $DBUSER, $DBPASS);
            // set the PDO error mode to exception
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            //die(json_encode(array('outcome' => true)));
        }
        catch(PDOException $ex) {
            //die(json_decode(array('outcome' => false, 'message' => 'Unable to connect')));
        }       
    }

?>

为什么错误只出现在那个时间之后?是更好的方法吗?

问候, 埃利奥·费尔南德斯

阿戴森

如果没有global $pdo;零件,这会更好地封装而是从连接方法返回 PDO 对象,并将其传递给其他方法以供使用。

注意,我特意在不同的地方给变量赋予了不同的名称,以说明名称在从一个作用域传递到另一个作用域时不必相同,重要的是传递的对象。不过,您可能会考虑使用一致的名称,以便以后更容易理解代码,并通过流程跟踪对象。

<?php
$dbConn = dbConnect();
callQuery1($dbConn);
callQuery2($dbConn);

function callQuery1($db){
    // SQL query
    $q = "SELECT * FROM table1 WHERE name like 'john%' ";

    // Execute query
    $data1 = exeQuery($q, $db);
}

function callQuery2($db){
    // SQL query
    $q = "SELECT * FROM table2 WHERE event = 'holiday' ";

    // Execute query
    $data2 = exeQuery($q, $db);
}

// Execute SQL Query
function exeQuery($qry, $pdo) {

####### LINE 27 #######
    $stmt = $pdo->query($qry);

    if($stmt = $pdo->prepare($qry)) {
        $stmt->execute();
        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
        $stmt->closeCursor();       
        return $data;
    }
}

// database connection
function dbConnect(){

    $DBSERVER = "***";
    $DBUSER   = "***";
    $DBPASS   = "***";
    $DBNAME   = "***";

    // OBDC
    try {       
        $pdo = new PDO("odbc:DRIVER={SQL Server};Server={$DBSERVER};Database={$DBNAME}", $DBUSER, $DBPASS);
        // set the PDO error mode to exception
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    }
    catch(PDOException $ex) {
        //die(json_decode(array('outcome' => false, 'message' => 'Unable to connect')));
    }       
}
?>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章