0

PHP で実行している MySQL 結合クエリに ORDER BY 構文を追加しようとしています。基準を動的に選択するために、定義済みのセッション変数を使用しています。

正常に動作します:

$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

"%s" の後に、文字列内に ORDER BY を配置します。

さらに、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 に答える