2015-10-09 6 views
-1

Почему массив параметров не подготовлен ??? Так странно, это ошибка в Sqlsrv Extenstion ??SQLSVR не правильно подготовил отчет

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 = Array ("val1")

любые идеи кто-нибудь? Этот STR_REPLACE не будет работать в будущем, когда мне нужно вставить более 1 параметра

+0

Режим угадывания (потому что я не знаю, что делает 'class connect' под капотом):' '' отмечает строковый литерал. Параметр не является строковым литералом. 'где [val] =?' и 'где [val] нравится? '(а затем вы должны добавить %% к фактическому параметру). – VolkerK

ответ

0

Не заменяйте ? значениями в $params.

sqlsrv_query автоматически заменяет их под капотом как параметров, чтобы избежать инъекции sql.

Если вы замените str_replace, ваш код уязвим.

Кроме того, $params должен быть массивом массивов, а не только одним массивом. В конце концов, $params должен быть как:

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

После выполнения запроса с sqlsrv_query, всегда проверяйте, есть ли какая-либо ошибка с sqlsrv_errors() функции.

+0

, что моя проблема, я делаю это таким образом, и я использую sqlsrv_query, но не готов к тому, чтобы обработать оператор, поэтому я сделал str_replace как временное исправление. Может ли быть, что последнее расширение sqlsrv является ошибкой? – BYC

+0

@BenChen Я так не думаю. Что такое '$ paarms'? Вы пытаетесь удалить '' 'из своих запросов? Есть ли у вас какие-либо ошибки в PHP или SQLSRV? – alalp

+0

нет ошибки, но $ params = array ("value"); но я попробовал $ params = array (array ("value")); и они оба не готовят заявление – BYC