为什么没有准备参数数组???太奇怪了,这是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将无法运行
答案 0 :(得分:0)
请勿使用?
中的值替换$params
。
sqlsrv_query
会自动将它们替换为参数,以避免sql注入。
如果替换为str_replace
,则代码容易受到攻击。
此外,$params
必须是一个数组数组,而不仅仅是一个数组。最后,$params
应该是:
$params = array( array( "val1" ) );
使用sqlsrv_query
执行查询后,请务必检查sqlsrv_errors()
功能是否有任何错误。