Что не так с моим запросом выбора? - PullRequest
0 голосов
/ 16 сентября 2009

Я написал этот код для извлечения всех записей в таблице; однако по какой-то причине это не работает:

function GetAllData(){
    $result = mysql_query("SELECT * FROM a2h_member_type");

    while($row = mysql_fetch_array($result))
    {
        echo $row['member_type_id'] . " " . $row['member_type_name'] . " " . $row['description'];       
    }
}

Это не входит в цикл while, но в таблице есть 2 записи. Есть идеи?

Ответы [ 6 ]

4 голосов
/ 16 сентября 2009

Было бы две причины, по которым цикл while не работал:

  1. Запрос не выполнен. Учитывая простоту запроса, это может произойти, только если:
    • таблица не существует
    • нет связи с базой данных
  2. В таблице нет строк.

Можете ли вы проверить эти три вещи? Вы можете проверить, произошла ли ошибка, распечатав mysql_error(), и проверить количество возвращаемых строк, используя mysql_get_num_rows($result)

3 голосов
/ 16 сентября 2009

Проверьте, что mysql_errno() и mysql_error() возвращают.

Согласно документации PHP :

Ошибки, возвращаемые из базы данных MySQL, больше не выдают предупреждений.

Это означает, что вы должны проверять ошибки вручную (что в любом случае является хорошей практикой).

0 голосов
/ 16 сентября 2009

Сначала попробуйте добавить отладочную информацию:

error_reporting(E_ALL);
ini_set("display_errors", true);
..........
function GetAllData(){
    $result = mysql_query("SELECT * FROM a2h_member_type") or die(mysql_error());

    while($row = mysql_fetch_array($result))
    {

        echo $row['member_type_id'] . " " . $row['member_type_name'] . " " . $row['description'];

    }
}

Выполните это, пожалуйста, и скажите нам, что вы видите.

0 голосов
/ 16 сентября 2009

Я не вижу команды mysql_connect () или mysql_select_db (), поэтому я предполагаю, что вы подключились до вызова этого метода. Я также предполагаю, что вы использовали точное написание для имен полей, так как они чувствительны к регистру! Таким образом, логика будет диктовать, что mysql_fetch_array ($ result) не возвращает строк.

Поскольку метод явно не открывает базу данных и mysql_query () не указывает конкретный ресурс базы данных, запрос будет искать последнюю базу данных, которую вы открыли с помощью mysql_connect (). Если вы никогда не подключались или не переключались на другую базу данных, она не может найти базу данных. mysql_query () может возвращать FALSE, поэтому mysql_fetch_array () также возвращает FALSE.

0 голосов
/ 16 сентября 2009

Вы инкапсулированы в функцию. В зависимости от того, когда и где вызывается функция в вашем скрипте, возможно, вы еще не открыли соединение с базой данных или не выбрали вашу базу данных. Вы должны сделать оба, прежде чем вызывать эту функцию. Найдите, где функция вызывается в вашем коде, и убедитесь, что вы вызываете эти две вещи, прежде чем вызывать ее:

$con = mysql_connect([the databases URL], [your database username], [your database password]);
if(!$con) {
        die("Could not connect: " .mysql_error());
}
mysql_select_db([the name of your database], $con);

Вероятно, лучше всего было бы как-то сохранить переменную соединения (в этом примере $ con) и проверить ее в начале вашей функции, используя код if (! $ Con).

0 голосов
/ 16 сентября 2009

Единственное, что я могу предложить, это заключить имя таблицы в одинарные кавычки (я уверен, что есть более официальное имя для персонажа!)

$result = mysql_query("SELECT * FROM `a2h_member_type`");

- но поскольку в названии таблицы нет никаких странных символов, я не думаю, что это будет иметь большое значение. Возможно, стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...