致命错误:对 SQL SERVER 2012 的非对象 XAMPP 上的成员函数 query() 调用

Posted

技术标签:

【中文标题】致命错误:对 SQL SERVER 2012 的非对象 XAMPP 上的成员函数 query() 调用【英文标题】:Fatal error: Call to a member function query() on a non-object XAMPP to SQL SERVER 2012 【发布时间】:2019-11-23 22:17:47 【问题描述】:

我可以要求一些关于这个问题的指南,我正在尝试一些关于 php 到 SQL SERVER 的测试代码和指南,mysqli 似乎可以与 phpmyadmin 以下代码一起正常工作,但是,sqlsrv_connect 它没有似乎不起作用,我知道 MSSQL 有不同的结构,我可以要求一个链接或任何我能找到的连接源(或从 PHP 调用查询到 SQL SERVER 2012)吗?

我确实检查了这里提出的所有问题,不幸的是,大多数问题都是基于 mysqli 的,我没有看到(或可能已经跳过)与 SQL SERVER 2012 相关的问题。

我试过这个指南$query = mysqli_query($conn, $sql);,但没有运气。

这是 login.php 的代码

    session_start();
    include 'includes/conn.php';

    if(isset($_POST['login']))
        $username = $_POST['username'];
        $password = $_POST['password'];
        $sql = "SELECT * FROM usermasterfile WHERE username = '$username'";
        $query = $conn->query($sql);

        if($query->num_rows < 1)
            $_SESSION['error'] = 'Cannot find account with the username';
        
        else
            $row = $query->fetch_assoc();
            if(password_verify($password, $row['password']))
                $_SESSION['admin'] = $row['id'];
            
            else
                $_SESSION['error'] = 'Incorrect password';
            
        

    
    else
        $_SESSION['error'] = 'Input admin credentials first';
    

    header('location: index.php');

?>

而且,这是 conn.php 的代码

$serverName = "XXXXXX\SQLSERVER";
$connectionInfo = array( "Database"=>"XXXXXX", "UID"=>"XXXXXX", "PWD"=>"xxxxxx");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) 
     echo "Connection established.<br />";
else
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));

?>

此代码工作文件(用于 phpmyadmin)

    $conn = new mysqli('xxxx', 'xxxx', '', 'xxxx');

    if ($conn->connect_error) 
        die("Connection failed: " . $conn->connect_error);
    

?>

连接已建立,但错误依旧。

Fatal error: Call to a member function query() on a non-object in C:\xampp\htdocs\path\tofile\login.php on line 9

【问题讨论】:

【参考方案1】:

函数sqlsrv_* 是PHP Driver for SQL Server 的一部分,它们不是面向对象的。这就是你的错误的原因。

您的conn.php 似乎是正确的,所以只需在login.php 中使用适当的sqlsrv_* 函数:

<?
    session_start();
    include 'includes/conn.php';

    if (isset($_POST['login'])) 
        $username = $_POST['username'];
        $password = $_POST['password'];
        $sql = "SELECT * FROM usermasterfile WHERE username = '$username'";
        $query = sqlsrv_query($conn, $sql, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET));
        if ($query === false ) 
            echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
            exit;
        

        if (sqlsrv_num_rows($query) < 1) 
            $_SESSION['error'] = 'Cannot find account with the username';
         else 
            $row = sqlsrv_fetch_array($query, SQLSRV_FETCH_ASSOC);
            if (password_verify($password, $row['password'])) 
                $_SESSION['admin'] = $row['id'];
            
            else
                $_SESSION['error'] = 'Incorrect password';
            
        
    
    else
        $_SESSION['error'] = 'Input admin credentials first';
    

    header('location: index.php');
?>

【讨论】:

@pjustindaryll 很高兴为您提供帮助。我已将sqlsrv taq 添加到您的问题中。

以上是关于致命错误:对 SQL SERVER 2012 的非对象 XAMPP 上的成员函数 query() 调用的主要内容,如果未能解决你的问题,请参考以下文章

SQL 2005 用IP连接时 提示发生内部连接致命错误 这是为啥?我重装了SQL server2005后还是这样 求解答

SQL Server - 在“返回”附近的预期条件的上下文中指定的非布尔类型的表达式

问题:我的非可选变量为零。 (展开时出现致命错误)

Firebase crashlytics 中的非致命错误能否在不杀死应用程序 React Native 的情况下记录错误

Swift 中的非英文字符给出:致命错误:在展开可选值时意外发现 nil

PHP 致命错误:在第 45 行的 admin\includes\html\database.class.php 中的非对象上调用成员函数 prepare()