Resource id #85 или как вернуть нормальное значение базы данных

Главные вкладки

Аватар пользователя pio pio 5 марта 2011 в 15:51

Господа, выполняю запрос к бд, возвращаются значения 'Resource id #n' под разными номерами. укажите, пожалуйста, что я не так понимаю? почему не удается вернуть нормальные значения из бд? и что такое этот загадочный 'Resource id #n'?

заранее спасибо за помощь.

Комментарии

Аватар пользователя pio pio 6 марта 2011 в 3:43

MaNaX wrote:
http://api.drupal.ru/api/group/database/6
db_result(db_query('sql запрос'));
и смотри phpadmin'ом что там вообще должно возвращать

благодарю. подскажите, пожалуйста, как будет выглядеть код запроса к базе, (таблица ниже), с фиксом от иньекции, если запрос делает юзер с uid равным тому, который обозначен в записи, т.е. $user->uid

понимаю, что ошибка простейшая и скорее всего в синтаксисе, но не могу понять где:
__________
require_once('...');

global $user;

$result = (mysql_query("SELECT f_url FROM table_name WHERE uid = '$user->uid'");

while ($done = mysql_fetch_assoc($result))
{
var_dump ($done);
}

mysql_close();

Аватар пользователя pio pio 6 марта 2011 в 5:24

RxB wrote:
"MaNaX" wrote:

http://api.drupal.ru/api/group/database/6
db_result(db_query('sql запрос'));
и смотри phpadmin'ом что там вообще должно возвращать

$result = mysql_result(mysql_query("SELECT f_url FROM table_name WHERE uid = '$user->uid'"));

так что ли? если так, то будет "Wrong parameter count for mysql_result()"
не зря же прошу поправить конкретный пример, чтобы разобрать ошибку на практике.

Аватар пользователя MaNaX MaNaX 6 марта 2011 в 15:09

какой mysql_result если написано db_result
внимательней читайте что вам пишут, и реально потратье время на внимательное чтение апи по ссылке - это очень поможет далее...

Аватар пользователя pio pio 6 марта 2011 в 15:47

еще сам не могу решить, правда туплю или прикидываюсь, но с db_query получаем:

Call to undefined function db_result()

Аватар пользователя pio pio 6 марта 2011 в 17:55

MaNaX wrote:
"SELECT f_url FROM table_name WHERE uid = '$user->uid'"
- неправильно
"SELECT f_url FROM {table_name} WHERE uid = %d", $user->uid

да, именно так и делаю:

но получаю

Fatal error: Call to undefined function db_result() in /public_html/modules/php/php.module(75) : eval()'d code on line 6

таблица без префикса, поэтому фигурные скобки опускал до последнего ответа. %d, судя по всему,- это защита от иньекции, насколько понимаю.

а если заменить db_ на mysql_ получим 2 warning, но скрипт будет выполнен:

# Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource в функции eval().
# Warning: Wrong parameter count for mysql_result() в функции eval()

в этом случае, var_dump() вернет NULL

Аватар пользователя pio pio 6 марта 2011 в 22:48

для скрипта формата mysql_result(mysql_query('sql запрос')); получаем следующие ошибки:

* Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource в функции eval() (строка 6 в файле /public_html/modules/php/php.module(75) : eval()'d code).
* Warning: Wrong parameter count for mysql_result() в функции eval() (строка 6 в файле /public_html/modules/php/php.module(75) : eval()'d code).

а если делаем ровно так, как предлагали выше db_result(db_query('sql запрос')); то получаем:

Fatal error: Call to undefined function db_result() in /public_html/modules/php/php.module(75) : eval()'d code on line 6

либо функции db_result и db_query нужно предварительно вызывать, как глобальную переменную, либо их нужно объявить, я так понимаю ошибки db_. а для первого случая с mysql_ где-то не верен синтаксис.

вот мой код

<?php

require_once('includes/database/mysql/dbcfg.php');
global 
$user;

$result mysql_result(mysql_query("SELECT f_url FROM {server} WHERE uid = %d"$user->uid));

var_dump ($result);

mysql_close();

?>
Аватар пользователя MaNaX MaNaX 6 марта 2011 в 23:35

блин тока счас обратил на версию друпала((
http://xandeadx.ru/blog/drupal/259
новый абстрактный уровень для работы с базой
PS так непривычно что работаешь уже не с самой новой версией)))
require_once('includes/database/mysql/dbcfg.php'); - это наверно не нужно писать все подключается и прописывается что нужно сразу при работе
http://drupal.org/developing/api/database

Аватар пользователя pio pio 8 марта 2011 в 19:05

это жесть, спасибо))) если есть у кого опыт пользования подобным кодом - поделитесь, пожалуйста, желательно с пояснениями что и почему. заранее спасибо. http://api.drupal.org/api/drupal/includes--entity.inc/class/EntityFieldQ... на примере ноды не совсем понимаю.

вот на этот скрипт cms говорит EntityFieldQueryException: Объект <em class="placeholder">server</em> не имеет таблиц в базе. в функции EntityFieldQuery->propertyQuery()

<?php
global $user;

$query = new EntityFieldQuery;

$result $query
  
->entityCondition('entity_type''server')
  ->
propertyCondition('uid'$user->uid)
  ->
execute();
  
var_dump($result);
?>
Аватар пользователя pio pio 20 марта 2011 в 0:21

Drupal 7

воспользовавшись информацией отсюда http://xandeadx.ru/blog/drupal/88 столкнулся с проблемой:

Recoverable fatal error: Object of class DatabaseStatementBase could not be converted to string в функции eval() (строка 14 в файле /public_html/modules/php/php.module(75) : eval()'d code).

эту ошибку выдает следующая строка:

<?php
$query 
db_query("SELECT f_url FROM {server} WHERE uid= :uid", array(
  
':uid' => $user->uid,
));

echo 

$query;
?>

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

object(DatabaseStatementBase)#4 (2) {
["dbh"]=>
object(DatabaseConnection_mysql)#2 (14) {
["shutdownRegistered:protected"]=>
bool(false)
["target:protected"]=>
string(7) "default"
["key:protected"]=>
string(7) "default"
["logger:protected"]=>
NULL
["transactionLayers:protected"]=>
array(0) {
}
["driverClasses:protected"]=>
array(5) {
["SelectQuery"]=>
string(11) "SelectQuery"...
(часть списка)

насколько понимаю, проблема в

<?php
echo
?>

просто получение значения поля проходит на ура! а если делать выборку с условием, тогда и возникает эта ошибка.

где проблема?

заранее спасибо