【问题标题】:SQL query on windows IIS server 2003 breaks with passed variable, jQuery AJAXWindows IIS 服务器 2003 上的 SQL 查询与传递的变量 jQuery AJAX 中断
【发布时间】:2011-03-07 02:17:59
【问题描述】:

在处理当前项目时遇到了一个奇怪的问题。我有一个 html 页面,它对 php 文件执行 AJAX 调用,并传递一个变量。 php 文件使用此变量创建 SQL 查询,生成 XML 文件,并返回结果。

在我的网络服务器上,这一切都很好。但是,当移动到 Windows 2003 IIS(永久家庭)服务器时,它会中断。

到目前为止的观察... 这在 Windows 服务器上中断:

$qry  = "SELECT * FROM structure_name WHERE ID = $variable ORDER by ID ASC";
$results = mysql_query($qry);

这在 Windows 服务器上中断:

$variable = 5; 
$qry  = "SELECT * FROM structure_name WHERE ID = $variable ORDER by ID ASC";
$results = mysql_query($qry);

这在 Windows 服务器上中断:

$variable = 5; 
$qry  = "SELECT * FROM structure_name WHERE ID = " + $variable + "ORDER by ID ASC";
$results = mysql_query($qry);

这行得通:

$qry  = "SELECT * FROM structure_name WHERE ID = 5 ORDER by ID ASC";
$results = mysql_query($qry);

因此,服务器似乎不喜欢将变量包含在查询字符串中。 有什么建议吗?

【问题讨论】:

  • 它是如何“破解”的?你得到mysql错误吗?它只是什么都不做吗?它没有返回任何行吗?

标签: mysql iis jquery windows-server-2003


【解决方案1】:

您看到什么错误消息?如果您没有看到错误(或者您只是收到 HTTP 500 错误),请在您的 PHP.ini 文件中打开错误或查看您的 PHP 错误日志。这将使我们能够很好地了解问题所在。

不过,您的第三个陈述确实有两个问题:

  1. 它需要在单词 ORDER 之前有一个空格,否则 $variable 会像这样对它进行破坏:WHERE ID = 5ORDER by。
  2. 它使用加号,在 PHP 中是加法,而不是串联。改为使用点/句点将其连接为字符串。

应该是这样的:

$variable = 5; 
$qry  = "SELECT * FROM structure_name WHERE ID = " . $variable . " ORDER by ID ASC";
$results = mysql_query($qry);

另一个想法:使用 MySQL 分析器 (http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html) 查看正在发送到 MySQL 服务器的 SQL 语句。可能是您的 MySQL 服务器正在生成错误。您还可以查看 MySQL 是否有可以检查的错误日志

此外,您可能希望转义输入以避免 SQL 注入攻击。试试这个:

$variable = 5;
$qry = sprintf("SELECT * FROM structure_name WHERE ID = %d ORDER by ID ASC",
    mysql_real_escape_string($variable));
$results = mysql_query($qry);

有关 mysql_query 和 sql 注入攻击的更多信息,请点击以下链接:

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2019-11-03
    相关资源
    最近更新 更多