У меня есть 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:
- Объектно-ориентированный интерфейс
- Поддержка подготовленных заявлений
- Поддержка нескольких заявлений
- Поддержка транзакций
- Расширенные возможности отладки
- Поддержка встроенного сервера
Также из документов:
Если вы используете 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-> – это столбец, из которого вы хотите извлечь данные)
Надеюсь это поможет.