donglikuang8145 2016-11-14 20:34
浏览 174

PHP sqlsrv_query()期望参数1为资源,布尔值为

I am New with MS-SQL with PHP. I am trying to save the session to database but in MS-SQL. when i run the php i get the error.

sqlsrv_query() expects parameter 1 to be resource, boolean.

This is my Code.

<?php
class SQLSrv_Session
{
const DB_HOST= "1DB_HOST";
const DB_PASS= "DB_PASS";
const DB_USER= "DB_USER";
const DB_NAME= "DB_NAME";
const DB_SESSION_TABLE="DB_SESSION_TABLE";
/**
 * Database connection resource
 * 
 * @var resource
 */
private static $_sess_db;
/**
 * Escape string for mssql query
 * 
 * @param string $data
 * @return string
 */
private static function sqlsrv_escape($data) {
    return str_replace("'","''",$data);
}
/**
 * Open the session
 * 
 * @return bool
 */
public static function open() {
    $connectionInfo= array (
                        'UID' => self::DB_USER,
                        'PWD' => self::DB_PASS,
                        'Database' => self::DB_NAME
                        );
    self::$_sess_db = sqlsrv_connect(self::DB_HOST,$connectionInfo);
    return self::$_sess_db;
}
/**
 * Close the session
 * 
 * @return boolean
 */
public static function close() {
    return sqlsrv_close(self::$_sess_db);
}
/**
 * Read the session
 * 
 * @param string $id
 * @return string 
 */
public static function read($id) {
    $sql = 'SELECT SCS_DATA FROM '. self::DB_SESSION_TABLE .' '.
           'WHERE SCS_ID = \''.self::sqlsrv_escape($id).'\'';       
    $stmt= sqlsrv_query(self::$_sess_db, $sql);
    if (!empty($stmt)) {
        $row= sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC);
        return $row['SCS_DATA'];
    }
    return '';
}
/**
 * Write the session
 * 
 * @param string $id
 * @param string $value
 * @return boolean
 */
public static function write($id, $value) {

echo 'aaaaaaa';
    $sql= 'UPDATE '.self::DB_SESSION_TABLE.' SET SCS_DATA=?,SCS_ACCESS=? WHERE SCS_ID=?';         
    $params = array(111112, 3333322, 12222221);     
    $stmt= sqlsrv_query(self::$_sess_db, $sql, $params);
print_r($params);
    if (!empty($stmt)) {
        $result= sqlsrv_rows_affected($stmt);
        if ($result>0) {
        echo 'eeew';
            return true;
        }else{
        echo $result;
        }
    }
    $sql= 'INSERT INTO '.self::DB_SESSION_TABLE.' (SCS_DATA,SCS_ACCESS, SCS_ID) VALUES (?,?,?)';
    $stmt= sqlsrv_query(self::$_sess_db, $sql, $params);
 print_r($params);

    if (!empty($stmt)) {
        $result= sqlsrv_rows_affected($stmt);
        if ($result>0) {
            return true;
            echo 'yyyyyy';
        }else{
        echo $result;
        }
    }
    return false;
}
/**
 * Destroy the session
 * 
 * @param string $id
 * @return boolean
 */
public static function destroy($id) {
    $sql = 'DELETE FROM '.self::DB_SESSION_TABLE.' WHERE SCS_ID = ?';
    $params= array(self::sqlsrv_escape($id)); 
    $stmt= sqlsrv_query(self::$_sess_db,$sql,$params);
    return ($stmt!==false);
   }
   /**
 * Garbage Collector
 * 
 * @param integer $max
 * @return boolean
 */
public static function gc($max) {
    $sql = 'DELETE FROM '.self::DB_SESSION_TABLE.' WHERE SCS_ACCESS < ?';
    $params= array(array(date("Y-m-d H:i:s",time() - $max))); 
    $stmt= sqlsrv_query(self::$_sess_db, $sql, $params);
    return ($stmt!==false);
   }
}

// to prevent problem of session write after close as PHP 5.0.5 
 register_shutdown_function('session_write_close');

ini_set('session.save_handler', 'user');
session_set_save_handler(array('SQLSrv_Session', 'open'),
                     array('SQLSrv_Session', 'close'),
                     array('SQLSrv_Session', 'read'),
                     array('SQLSrv_Session', 'write'),
                     array('SQLSrv_Session', 'destroy'),
                     array('SQLSrv_Session', 'gc'));


                     // display PHP error
error_reporting(E_ALL);
ini_set("display_errors", 1);

// set the probability of garbage collector to 1
ini_set('session.gc_probability', 100);
ini_set('session.gc_divisor', 100);

session_start();

$_SESSION  ['lll']= 'pppp';

I am getting the error in line 55,121,74,86,44.

this are the lines with the error.

$stmt= sqlsrv_query(self::$_sess_db, $sql);

$stmt= sqlsrv_query(self::$_sess_db, $sql,$params);

$stmt= sqlsrv_query(self::$_sess_db, $sql, $params);

$stmt= sqlsrv_query(self::$_sess_db, $sql,$params);

sqlsrv_close(self::$_sess_db);

If some one please can find wirer the error is the the sqlsrv_query. Thanks

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 seatunnel 怎么配置Elasticsearch
    • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
    • ¥15 (标签-MATLAB|关键词-多址)
    • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
    • ¥500 52810做蓝牙接受端
    • ¥15 基于PLC的三轴机械手程序
    • ¥15 多址通信方式的抗噪声性能和系统容量对比
    • ¥15 msix packaging tool打包问题
    • ¥15 finalshell节点的搭建代码和那个端口代码教程
    • ¥15 Centos / PETSc / PETGEM