2016-08-29 73 views
1

執行腳本接收URL變量:SQL查詢不上MSSQL

if(isset($_GET['string'])){ 
    $string = $_GET['string']; 
} 

然後我使用SQL查詢這個變量:

$sql = 
"SELECT 
    * 
FROM 
    mytable 
WHERE 
    mytable.column_a = '".$string."'"; 

的問題是,此查詢不執行,其中我的變量包含特殊字符。例如:

/myscript.php?string=a>xxx<P>[email protected]" 

嘗試同時使用ヶ輛()和addslashes()。還試圖複製/粘貼echo的變量 - 工作正常。

我該如何解決這個問題?

+1

使用查詢參數而不是將值填充到查詢字符串中。 –

+0

我也建議同樣的事情,使用查詢參數,而不是把值放在你的php查詢字符串 –

+0

如果你有特殊字符,你從URL中取出字符串,你不需要使用解碼? http://php.net/manual/en/function.htmlspecialchars-decode.php –

回答

0

嘗試此查詢

首先檢查$字符串越來越正確,然後嘗試,

$sql = 
"SELECT 
    * 
FROM 
    mytable 
WHERE 
    mytable.column_a = ".$string; 
0

如果column_a類型爲nvarchar數據類型的嘗試,包括字符串引號N前。

1

請使用參數代替拼接查詢部分。此代碼應該很好地工作:

<?php 
header('Content-Type: text/html; charset=utf-8'); 

$serverName = "SERVER\INSTANCE"; 
$connectionInfo = array("Database"=>"Test"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 

if(isset($_GET['string'])){ 
    $params = array($_GET['string']); 
} 

if($conn === false) { 
    echo "Unable to connect.</br>"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

$tsql = 
"SELECT * 
FROM mytable 
WHERE column_a = ?"; 

$stmt = sqlsrv_query($conn, $tsql, $params); 

if($stmt === false) { 
    echo "Error in executing query.</br>"; 
    die(print_r(sqlsrv_errors(), true)); 
} 

while ($obj = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC)) { 
    echo $obj[0]; 
} 

sqlsrv_free_stmt($stmt); 
sqlsrv_close($conn);