SQL查询不在MSSQL上执行

时间:2016-08-29 10:56:34

标签: php html sql sql-server

脚本从URL接收变量:

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

然后我在sql查询中使用这个变量:

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

问题是这个查询没有执行,我的变量包含特殊字符。示例:

/myscript.php?string=a>xxx<P>yy@"

尝试同时使用 htmlentities() addslashes()。还尝试复制/粘贴变量的 echo - 工作正常。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试此查询

首先检查$ string是否正确,然后尝试,

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

答案 2 :(得分:0)

如果column_a是nvarchar数据类型,请在字符串引号之前尝试包含N.

答案 3 :(得分:0)

我建议您使用urlencode - 对您的代码进行网址编码,有关详细信息和详细信息,您还可以查看以下链接:

http://php.net/manual/en/function.urlencode.php