为什么我的PHP页面没有正确查询数据库?

时间:2011-12-14 14:03:39

标签: php mysql wampserver

我正在尝试设置一个查询数据库以填充页面的脚本。这是我第一次尝试使用PHP进行数据库查询,所以请原谅我这个问题是非常愚蠢的。

我遇到的问题是页面似乎没有连接到数据库,因为前两个调试语句在浏览器中呈现,但后面没有任何内容。但是,当我使用php.exe在命令行上运行它时,它会正常运行并显示查询中的所有必需数据。

我在Windows 7上运行wampserver 2.2,它不会在任何浏览器中显示(在Chrome,Firefox和IE9中测试。

我目前的代码如下。我也尝试将连接移动到头部,但这样可以防止渲染任何内容,甚至是debug1。在任何情况下都不会呈现die语句。

<html>

<body>   
debug1<br /> 

<?php
echo "debug2<br />";
$con = mysql_connect("hostname.of.database","username","password") die('Could not connect: ' . mysql_error());
echo "debug3<br />";

mysql_select_db("dbname",$con);

$result = mysql_query("SELECT * FROM Mail");

while ($row = mysql_fetch_array($result))
  {
  echo $row['Sender'];
  echo "<br />";
  echo $row['Subject'];
  echo "<br />";
  echo $row['Message'];
  echo "<br />";
  echo "<br />";
  }

echo "debug4<br />";

mysql_close($con);
?>
</body>
</html>

修改

die语句移动到与连接相同的行后,我在页面中呈现以下内容:

Fatal error: Call to undefined function mysql_connect() in C:\wamp\www\test.php on line 10

修改

我已将extension=php_mysql.dll添加到我的php.ini文件中并重新启动了服务器。我现在得到以下页面:

error messages

修改

问题解决了。我的最后一个问题是我忘了用实际的主机名替换hostname.of.database

对于将来阅读此内容的人,解决方案如下:

  1. 在检索结果之前不要关闭连接
  2. 确保通过将extension=php_mysql.dll添加到php.ini文件来启用php_mysql扩展
  3. 重新启动服务器,清除浏览器缓存并重试。

3 个答案:

答案 0 :(得分:3)

因为您在获取结果之前关闭了连接:

// Don't do this!!!
//mysql_close($con);

while ($row = mysql_fetch_array($result))
  {
  echo $row['Sender'];
  echo "<br />";
  echo $row['Subject'];
  echo "<br />";
  echo $row['Message'];
  echo "<br />";
  echo "<br />";
  }

除非您在打算创建另一个内存时特别需要释放某些内存或销毁连接,否则通常无需对mysql_close()进行显式调用。它将在脚本完成执行时被调用。

更新

发布错误消息后,似乎没有为您的WAMP堆栈启用MySQL扩展。命令行可以使用与Web服务器使用的不同的php.ini文件。通过调用phpinfo()找到正确的php.ini并启用MySQL扩展。

答案 1 :(得分:1)

在你继续前进之前的一些建议 -

  1. 通过设置ini_set('display_errors','On'); AND error_reporting(E_ALL);
  2. 启用错误消息
  3. 尝试连接数据库后,请确保连接成功,否则输出错误,这将有助于您发现问题,如下所示:
  4. $conn = mysql_connect($host, $user, $pass) or die(mysql_error());
    

    晒。

答案 2 :(得分:0)

您可能需要打开php错误报告以获取更详细的错误消息:

<?php ini_set(‘display_errors’,1);
error_reporting(E_ALL|E_STRICT); ?>

您可以在此处详细了解: http://php.net/manual/en/function.error-reporting.php