【问题标题】:Escaping special characters in SQL query在 SQL 查询中转义特殊字符
【发布时间】:2012-08-23 01:01:37
【问题描述】:

我有一个 SQL Server 表,其中包含部门名称(即Admissions & RegistrationWomen's Softball coach),当您单击我们页面上的链接时,它会拉动该部门下的所有员工但是当您拉动 Women's Softball coach 我得到如下错误:

PHP 警告:mssql_query() [function.mssql-query]:>消息:第 1 行:“s”附近的语法不正确。 (严重性 15)在 >C:\Inetpub\wwwroot\DACC\directory\dept.php 第 179 行

PHP 警告:mssql_query() [function.mssql-query]: >message: 字符串 ') ORDER BY Lastname' 前的非闭合引号。 >>>(严重性 15)在 C:\Inetpub\wwwroot\DACC\directory\dept.php 第 179 行

PHP 警告:mssql_query() [function.mssql-query]:>第 179 行 C:\Inetpub\wwwroot\DACC\directory\dept.php 中的查询失败

PHP 警告:mssql_query() [function.mssql-query]:消息:第 5 行:“s”附近的语法不正确。 (严重性 15)在 >C:\Inetpub\wwwroot\DACC\directory\dept.php 第 195 行

PHP 警告:mssql_query() [function.mssql-query]: >message: 字符串 ' 前的未闭合引号 按目录排序。姓氏'。 (严重性 15)在 C:\Inetpub\wwwroot\DACC\directory\dept.php >在第 195 行

我知道这是转义特殊字符的问题,但有没有办法在查询中做到这一点,还是我必须在表中做到这一点?

上面引用的代码在这里--->

$department = $_GET['dept'];

// This will evaluate to TRUE so the text will be printed.
if (isset($department)) {

 // Send a select query to MSSQL

$query = mssql_query("SELECT * FROM directory WHERE department IN (SELECT id FROM     departments WHERE name='$department') ORDER BY Lastname");

以下是查询的执行方式:

   function listDepts() { 

    $query = "SELECT DISTINCT name FROM departments ORDER BY name"; 
    $result = mssql_query($query); 
    echo "<h3>Please select a department:</h3>\n"; 
    echo "<ul>\n"; 

    for ($i=0; $i<mssql_num_rows($result); $i++) { 
        $info = mssql_fetch_assoc($result); 
        echo "<li><a href=\"dept.php?dept=$info[name]\">$info[name]</a></li>\n"; 
    } 

    echo "</ul>\n\n"; 
}

这是生成部门列表的代码。

 function listDepts() {

$query = "SELECT DISTINCT  name FROM     departments ORDER BY     name";
$result = mssql_query($query);

echo "<h3>Please select a department:</h3>\n";
echo "<ul>\n";

for ($i=0; $i<mssql_num_rows($result); $i++) {
    $info = mssql_fetch_assoc($result);
    echo "<li><a href=\"dept.php?dept=$info[name]\">$info[name]</a></li>\n";
}

echo "</ul>\n\n";

 }

【问题讨论】:

  • 您在哪里看到 SQL 特殊字符?
  • 当它从桌子上拉出来时,它的部门名称女子垒球中有一个 ' 问题
  • 你是如何实际执行查询的?你是怎么传入参数的?
  • 请不要在 cmets 中发布代码 - 更新您的问题并将其发布到那里 - 如您所见,所有格式都丢失了。
  • 有什么原因不能通过departments.id选择部门?

标签: php sql special-characters


【解决方案1】:

我强烈建议您使用准备好的语句,然后使用变量执行它:

$stmt = $dbh->prepare("SELECT * FROM directory WHERE department IN (SELECT id FROM departments WHERE name=?) ORDER BY Lastname");
if ($stmt->execute(array("Women's Softball coach"))) {
    while ($row = $stmt->fetch()) {
        print_r($row);
    }
}

请参阅PHP documentation on prepared statement 了解更多信息。

在你的具体情况下,你会有这样的事情:

$stmt = $dbh->prepare("SELECT * FROM directory WHERE department IN (SELECT id FROM departments WHERE name=?) ORDER BY Lastname");
for ($i=0; $i<mssql_num_rows($result); $i++) {
    if ($stmt->execute(array($result))) {

        $info = $stmt->fetch(); 
        ...
} 

【讨论】:

  • 问题在于它不会只照顾那个部门。如果有其他部门有特殊字符,我仍然会遇到同样的问题。
  • @Inky1231 它适用于所有数据。请参阅我的更新答案。
  • @Inky 查看我的更新答案。您准备一次查询 - 然后使用重复参数在循环中执行它。
  • 试图让它工作,还没有成功,但会继续努力。
猜你喜欢
  • 1970-01-01
  • 2016-01-14
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
相关资源
最近更新 更多