脚本从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 - 工作正常。
我该如何解决这个问题?
答案 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 - 对您的代码进行网址编码,有关详细信息和详细信息,您还可以查看以下链接: