SQLSVR没有正确准备语句

时间:2015-10-09 14:05:17

标签: php sql-server wamp sqlsrv

为什么没有准备参数数组???太奇怪了,这是Sqlsrv Extenstion中的一个错误吗?

public $availableQueries = array("getOnlyCusips"=>"SELECT * FROM [THEDB] where [val] like '%?%' ",
                                "searchCusips"=>"SELECT * FROM [THEDB] where [val] = '?'");
function runQuery($query,$params){
    $connection = new connect;
    $conn = $connection->EstablishConnection();
    $sql = $this->availableQueries[$query];
    $params = explode(',',$params);
    */*************************BUG IN EXTENSION???, STR_REPLACE BAD FIX BELOW **************/*
    if($query=="getOnlyCusips"){
        $sql = str_replace("?",$params[0],$sql);
    }
    if($query=="searchCusips"){
        $sql = str_replace("?",$params[0],$sql);
    }
    */*************************BUG IN EXTENSION???, STR_REPLACE BAD FIX ABOVE**************/*
    $stmt = sqlsrv_query( $conn, $sql, ($params));
    $returnObject=array();
    while( $row = sqlsrv_fetch_array( $stmt,  SQLSRV_FETCH_ASSOC) ) {
        array_push($returnObject,$row);
    }
    $connection->closeConnection();
    return $returnObject;                           
}

基本上我试图将$ params放入sqlsrv_query函数来准备语句,但根本不是。我必须做string_replace来替换'?'与感兴趣的param。 我肯定使用格式正确的params array = Array(“val1”)

任何人的想法?当我需要插入超过1个参数时,此STR_REPLACE将无法运行

1 个答案:

答案 0 :(得分:0)

请勿使用?中的值替换$params

sqlsrv_query会自动将它们替换为参数,以避免sql注入。

如果替换为str_replace,则代码容易受到攻击。

此外,$params必须是一个数组数组,而不仅仅是一个数组。最后,$params应该是:

$params = array( array( "val1" ) );

使用sqlsrv_query执行查询后,请务必检查sqlsrv_errors()功能是否有任何错误。