почему моя страница PHP не запрашивает базу данных должным образом? - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь настроить скрипт, который запрашивает базу данных для заполнения страницы.Это мой первый набросок запросов к базе данных в PHP, поэтому простите меня, если проблема действительно глупая.

Проблема, с которой я столкнулся, заключается в том, что страница, похоже, не подключается к базе данных, так как первые 2 отладкиоператоры отображаются в браузере, но ничего после них нет.однако, когда я запускаю его в командной строке с помощью php.exe, он работает правильно и отображает все необходимые данные из запроса.

Я запускаю wampserver 2.2 в Windows 7, и он не отображается ни в одном браузере (протестировано в 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. убедиться, что расширение php_mysql включено, добавив extension=php_mysql.dll в файл php.ini
  3. , перезагрузитесервер, очистите кеш браузера и попробуйте снова.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2011

Поскольку вы закрываете соединение перед получением результатов:

// 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(). Он будет вызван, когда скрипт завершит выполнение.

Обновление:

После публикации сообщения об ошибке может показаться, что расширение MySQL не включено для стека WAMP. В командной строке может использоваться файл php.ini, отличный от веб-сервера. Найдите правильный php.ini, позвонив phpinfo() и включите расширение MySQL.

1 голос
/ 14 декабря 2011

Несколько рекомендаций, прежде чем вы сможете продолжить -

  1. Включить сообщения об ошибках, установив ini_set('display_errors','On'); И error_reporting(E_ALL);
  2. После попытки подключения к базе данных убедитесь, чтосоединение было установлено успешно, в противном случае выведите ошибку, которая поможет вам определить проблему следующим образом:
$conn = mysql_connect($host, $user, $pass) or die(mysql_error());

Shai.

0 голосов
/ 14 декабря 2011

Возможно, вы захотите включить отчеты об ошибках php для более подробных сообщений об ошибках:

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

Подробнее об этом можно прочитать здесь: http://php.net/manual/en/function.error-reporting.php

...