Как получить целочисленный вывод из SQL-запроса

У меня есть SQL-запрос следующим образом:

$tagID = mysql_query("SELECT tagID FROM tags WHERE tagName = '$tag'"); echo $tagID; 

Я хочу, чтобы $ tagID содержал что-то вроде 3, или 5, или любое целое число. Но когда я повторяю это, вывод:

 resource id #4 

Как я могу сделать это простым целым?

 $result = mysql_query("SELECT tagID FROM tags WHERE tagName = '$tag'"); // figure out why an existing tag gets the ID zero instead of 'tagID' $row = mysql_fetch_assoc($result); echo $row["tagID"]; 

mysql_query() возвращает ресурс результата, а не значение в запросе. Вы должны использовать функции fetch для получения фактических данных.

Если вы хотите, чтобы этот код был более чистым, проверьте, что $result не является false (ошибка запроса), а $row не является false (ничего не найдено).

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

Вот пример вещи, называемой функцией:

 <? function dbgetvar(){ $args = func_get_args(); $query = array_shift($args); foreach ($args as $key => $val) { $args[$key] = "'".mysql_real_escape_string($val)."'"; } $query = vsprintf($query, $args); $res = mysql_query($query); if (!$res) { trigger_error("dbgetarr: ".mysql_error()." in ".$query); return FALSE; } else { $row = mysql_fetch_row($res); if (!$row) return NULL; return $row[0]; } } 

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

 $tagID = dbgetvar("SELECT tagID FROM tags WHERE tagName = %s",$tag); echo $tagID; 

Функция mysql_query сама по себе возвращает «ресурс» при успешном выполнении и false при ошибке. В этом случае вы получаете ресурс с идентификатором # 44, который вы можете ожидать от этой функции.

Что вы можете сделать, так это взять результат mysql_query и использовать mysql_fetch_assoc для преобразования ресурса в ассоциативный массив. (Также проверьте mysql_fetch_row или mysql_fetch_field для других методов). Вот типичный способ структурирования этой проблемы:

 $query = "SELECT tagID FROM tags WHERE tagName = '$tag'"; $result = mysql_query($query); $array = mysql_fetch_assoc($result); $tagID = $array['tagID']; //your integer. 

Для получения дополнительной информации см. Инструкцию PHP Manual для mysql_query . Ознакомьтесь с комментариями пользователя внизу для особо хороших советов и примеров кода.

Вам не хватает одного шага. Попробуй это:

 $resource = mysql_query("SELECT tagID FROM tags WHERE tagName = '$tag'"); $tagID = mysql_fetch_assoc($resource); print_r($tag_id); 

Если ваш запрос возвращает более одной строки (т. Е. Существует более одного тега с тем же именем тега), вы хотите поместить его в цикл:

 $resource = mysql_query("SELECT tagID FROM tags WHERE tagName = '$tag'"); while($tagID = mysql_fetch_assoc($resource)) { echo $tagID['tagID']; } 

добавление

Хотя вышеуказанный код решит вашу проблему, я настоятельно рекомендую вам остановиться прямо сейчас и узнать о mysqli . Это гораздо более новое, более надежное решение, чем использование функций mysql_* . Из документов:

Расширение mysqli, или, как его иногда называют, улучшенное расширение MySQL, было разработано для использования новых функций, обнаруженных в версиях MySQL версии 4.1.3 и новее. Расширение mysqli включено в версии PHP 5 и более поздних версий.

Расширение mysqli имеет ряд преимуществ, ключевые улучшения над расширением mysql:

  1. Объектно-ориентированный интерфейс
  2. Поддержка подготовленных заявлений
  3. Поддержка нескольких заявлений
  4. Поддержка транзакций
  5. Расширенные возможности отладки
  6. Поддержка встроенного сервера

Также из документов:

Если вы используете MySQL версии 4.1.3 или новее, настоятельно рекомендуется использовать расширение [MySQLi].

SQL-запрос всегда возвращает результат SQL-ресурса, возможно нечитаемый объект, содержащий результаты запроса. Из-за того, как хранятся базы данных, как пользователи могут манипулировать данными и объем данных, проще хранить его как идентификатор, чем как объект.

Чтобы получить нужные данные, вы должны сначала преобразовать их в массив:

 $result = mysql_query("SELECT tagID FROM tags WHERE tagName = '$tag'"); $row = mysql_fetch_assoc($result); echo $row["tagID"]; 

(Где $ row [column] – столбец, из которого вы хотите извлечь данные (

Или объект:

 $result = mysql_query("SELECT tagID FROM tags WHERE tagName = '$tag'"); $object = mysql_fetch_object($result); echo $object->tagID; 

(где столбец $ object-> – это столбец, из которого вы хотите извлечь данные)

Надеюсь это поможет.