0

我正在尝试将 ORDER BY 语法添加到我在 PHP 中执行的 MySQL 连接查询中。我正在使用已经定义的会话变量来动态选择标准。

工作正常:

$query_icons = sprintf("SELECT i.id, i.name, e.EmpNo FROM gbl_icons i LEFT JOIN gbl_empicons e ON e.IconId = i.id AND e.EmpNo = %s", GetSQLValueString($ParamEmpNo_WADAgbl_qemplisting, "text"));

当我尝试附加 ORDER BY 时,它会引发 500 内部服务器错误:

$query_icons = sprintf("SELECT i.id, i.name, e.EmpNo FROM gbl_icons i LEFT JOIN gbl_empicons e ON e.IconId = i.id AND e.EmpNo = %s", GetSQLValueString($ParamEmpNo_WADAgbl_qemplisting, "text")ORDER BY i.id ASC);

如何正确转义动态会话值?

4

2 回答 2

2

做这个:

$query_icons = sprintf("SELECT i.id, i.name, e.EmpNo FROM gbl_icons i LEFT JOIN gbl_empicons e ON e.IconId = i.id AND e.EmpNo = %s", GetSQLValueString($ParamEmpNo_WADAgbl_qemplisting, "text")."ORDER BY i.id ASC");

您忘记将 ORDER BY i.id ASC 包含在 " 中,因此您遇到了严重的语法错误

正如评论中提到的,这也可以:

$query_icons = sprintf("SELECT i.id, i.name, e.EmpNo FROM gbl_icons i LEFT JOIN gbl_empicons e ON e.IconId = i.id AND e.EmpNo = %s ORDER BY i.id ASC", GetSQLValueString($ParamEmpNo_WADAgbl_qemplisting, "text"));
于 2013-03-20T17:20:13.990 回答
2

将 ORDER BY 放在字符串中,在“%s”之后。

另外,直接将SQL查询伪造成字符串是非常不安全的,尝试使用PDO或其他数据访问层创建安全的参数化请求。

$query_icons = sprintf("SELECT i.id, i.name, e.EmpNo FROM gbl_icons i LEFT JOIN gbl_empicons e ON e.IconId = i.id AND e.EmpNo = %s ORDER BY i.id ASC", GetSQLValueString($ParamEmpNo_WADAgbl_qemplisting, "text"));
于 2013-03-20T17:23:12.037 回答