使用Internet Explorer时,MySQL查询有时会失败

时间:2009-09-03 14:39:48

标签: php sql mysql

我是php和MySQL的新手。我有一个用户可以选择州并在该州展示医院的网站。它适用于FireFox适用于所有州,但在IE中,当我拥有几百家医院时,屏幕闪烁,我最终收到一条消息,表明该页面无法显示。对于拥有少数医院的较小州,查询在IE中运行良好。

同样,我是新手,所以任何建议都将不胜感激。这是代码:

<form action="redirect_hosp.php" method="get">

<?php

$link = mysql_connect('SERVERNAME.com', 'USERNAME', 'PASSWORD'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
/*print 'Connected successfully';*/ 
mysql_select_db(it_phys);

$sql = "SELECT distinct(state) FROM hospitals ORDER BY state";
$rs = mysql_query($sql)or die("Connection to DataBase failed");
print ("<div align=center>");
print("<font color='#008000' size='2' face='Tahoma'><b>Find a Hospital</b></font><br><br>");
print ("Select a State<br>");
print ("<SELECT name='State' onchange='form.submit();'>");
print("<OPTION value='none' selected></OPTION>\n");
for($i = 0; $i < mysql_num_rows( $rs ); $i++)
{
$tmp = mysql_fetch_row( $rs );
print("<OPTION value=\"$tmp[0]\">$tmp[0]</OPTION>\n");
}
print ("</SELECT>");
print ("</div>");
mysql_free_result($rs);
mysql_close($link);

?>


<?php
if(isset($_GET['State'])) 
{
  $State=$_GET['State'];
  print "<div align=center><br><br>";
  print "State Selected: ".$State;
  print "<br><br></div>";
  /* run query to pull members based on state */
  $link = mysql_connect('SERVERNAME.com', 'USERNAME', 'PASSWORD'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 
/*print 'Connected successfully';*/ 
mysql_select_db(it_phys);

      $query = "SELECT
           hospitals.`Hospital Name`, hospitals.Address1,
           concat(rtrim(hospitals.City),', ',rtrim(upper(hospitals.State)), ' ', hospitals.zip) as City_State,
           hospitals.state,hospitals.`Phone Number`,hospitals.`Hospital Type`,hospitals.`Emergency Service`,
           hospitals.map
           FROM hospitals WHERE hospitals.state='".$State."' ORDER by hospitals.`Hospital Name`"; 


    $result = mysql_query($query) or die('Query failed: ' . mysql_error()); 
  /* show in table */
  // Printing results in HTML
    print "<style>

    h2 { border-bottom: 3px solid red; }
    table { border-bottom: 1px solid blue; align='left'; cellpadding=0; cellspacing=0 }
    td {border-bottom: 0px outset black; cellpadding=0 }

    </style>";
    print "<div align=center>";
    print "<table cellpadding='20'>";


    $i=0;
    $rows=mysql_num_rows($result);
    while($i < $rows) {
        print "<tr>";
        print "<style> td {border-bottom: 3px outset green; }</style>";
        print "<td valign='top' align='left'>";
        print "<font color='red'><strong>".mysql_result($result, $i, 0)."</strong></font>";
        print "<br>".mysql_result($result, $i, 1);
        print "<br><font color='red'>".mysql_result($result, $i, 2)."</font>";
        print "<br>".mysql_result($result, $i, 4);  
        print "</td>";
        print "<td width=350 valign='top' align='left'>";
        print "<br>Type: ".mysql_result($result, $i, 5);
        print "<br>Emergency Care: ".mysql_result($result, $i, 6);
        print "<br><br>";
        print "<a STYLE='text-decoration:none' target='_blank'
                 href='http://maps.google.com/maps?f=q&source=s_q&hl=en&q="
                .mysql_result($result, $i, 7)."'><b> Show Map</b></a>";     
        print "</td>";
        print "</tr>";

        $i=$i+1;

    }
mysql_free_result($result);
mysql_close($link);
}
print "</table>"
?> 

4 个答案:

答案 0 :(得分:2)

这可能是这一部分:

print "<tr>";
print "<style> td {border-bottom: 3px outset green; }</style>";
print "<td valign='top' align='left'>";

您应该将样式数据移动到之前的样式标记。

关于你的PHP代码:

mysql_select_db(it_phys);

除非it_phys是常量,否则应引用

mysql_select_db('it_phys');

而不是for循环,它计算返回的行数N + 1次,其中N是返回的行数,

for($i = 0; $i < mysql_num_rows( $rs ); $i++)
{
$tmp = mysql_fetch_row( $rs );
print("<OPTION value=\"$tmp[0]\">$tmp[0]</OPTION>\n");
}

在循环时尝试这个(并在数组周围使用括号):

while ($tmp = mysql_fetch_row($rs)) {
    print("<OPTION value=\"{$tmp[0]}\">{$tmp[0]}</OPTION>\n");
}

使用mysql_real_escape_string转义进入数据库的所有输入:

$query = "SELECT
           `Hospital Name`, Address1,
           concat(rtrim(hospitals.City),', ',rtrim(upper(State)), ' ', zip) as City_State,
           state,`Phone Number`,`Hospital Type`,`Emergency Service`,
           map
           FROM hospitals WHERE state='".mysql_real_escape_string($State)."' ORDER by `Hospital Name`"; 

答案 1 :(得分:0)

它可能与MySQL无关。没有查看实际页面(链接?)很难说,但是你在标签属性和其他可能导致IE解析器进入barf的地方输出了许多原始未转义的数据库数据。

应使用urlencode()转义链接内的数据。属性内或其他内容中的数据可能应使用htmlspecialchars()进行转义,除非您知道不这样做是安全的。

(也就是说,“无法显示页面”可能是由 lot 引起的,其中一些是早期的DOM访问,附加组件,缓存等。它们可能很难追查。)

答案 2 :(得分:0)

在查询完成检索所有记录之前,您的PHP脚本可能会超时。您的脚本超时设置为什么?

此外,您还需要了解如何将数据与逻辑和逻辑从演示文稿中分离出来。

答案 3 :(得分:0)

当在服务器上生成页面时,查询不能“废弃”IE。也许这是你生成的HTML。

扫描代码时我注意到的一些事情:

  • 您无需为每个查询进行连接。只需打开一个连接,最后将其关闭。
  • 这是遗留数据库吗?像“医院名称”这样的空格的字段对我来说有点令人震惊......