Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: не работает функция mysql_fetch_array()  (Прочитано 22248 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн $corpion

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
  • Ubuntu 9.10
    • Просмотр профиля
не работает функция mysql_fetch_array()
« : 09 Февраля 2010, 22:36:25 »
во время работы функции происходит ошибка:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/billing/viv_bal.php on line 12
кучу сайтов облазил, запрос вроде правильный, а не работает  :( помогите пожалйста!!!!!

вот код
function balanz($valid_user)
{
mysql_connect("localhost", "root", "pass") or die(mysql_error());
mysql_select_db("bauth") or die(mysql_error());
mysql_query("SET NAMES 'cp1251'");
$query="SELECT balans FROM `auth` WHERE name=$valid_user";
$result=mysql_query($query);

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        printf ("ID: %s", $row["balans"]);
}
}
Some kind of Monster

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #1 : 10 Февраля 2010, 00:26:24 »
1. Warning -- это не ошибка.
2. Скорее всего $result равен false, т.е. ошибка запроса.

Добавь вывод ошибки, мочет о чем-то скажет.
Код: (php) [Выделить]
...
$result = mysql_query($query);
if(!$result) {
echo mysql_error ();
}
...

Оффлайн $corpion

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
  • Ubuntu 9.10
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #2 : 10 Февраля 2010, 12:42:32 »
вот ошибка
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

говорит что не правильный синтаксис запроса. но вроде у меня все правильно(

нашел ошибку)
у меня $valid_user=0, хотя на самом деле не равна!! в ней логин юзера, но почему то он не передается( причем ни просто переменной, ни глобальной(
« Последнее редактирование: 10 Февраля 2010, 13:02:42 от $corpion »
Some kind of Monster

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #3 : 10 Февраля 2010, 13:23:42 »
Выполните свой запрос, скажем в phpmyadmin, чтобы понять, где собака порылась.

Оффлайн $corpion

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
  • Ubuntu 9.10
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #4 : 10 Февраля 2010, 13:37:00 »
беда в том, что если я вместо WHERE name=$valid_user пишу к примеру логин WHERE name=12345 - то все прекрасно работает, и выводит необходимые данные(
Some kind of Monster

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #5 : 10 Февраля 2010, 14:43:24 »
беда в том, что если я вместо WHERE name=$valid_user пишу к примеру логин WHERE name=12345 - то все прекрасно работает, и выводит необходимые данные(
Понял, я такое проходил.
Сделайте
$sql='...WHERE name='.$valid_us";
Для примера.
$sql='SELECT '."count($tVar),"."min($tVar),"."max($tVar),"."max($tVar)-min($tVar),"."avg($tVar),"."sum($tVar)".' FROM '.$TypeQ.' WHERE (DateTime>"'.$beginDate." ".$beginTime.' ") AND (DateTime<"'.$endDate." ".$endTime.'");';
« Последнее редактирование: 10 Февраля 2010, 15:05:52 от alexander.pronin »

Оффлайн $corpion

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
  • Ubuntu 9.10
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #6 : 10 Февраля 2010, 16:03:28 »
я сделал иначе. просто, взял и напрямую в скрипте из куки наполнил переменную и все заработало)))

$names=$_SESSION['authorized'];
mysql_connect("localhost", "root", "pass") or die(mysql_error());
mysql_select_db("bauth") or die(mysql_error());
mysql_query("SET NAMES 'cp1251'");
$query="SELECT `balans` FROM `auth` WHERE `name`=$names";
$result=mysql_query($query);
if(!$result)
{
   echo mysql_error();
}

while ($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
printf ("Ваш баланс: %s", $row["balans"]);
}
« Последнее редактирование: 10 Февраля 2010, 16:19:29 от $corpion »
Some kind of Monster

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #7 : 10 Февраля 2010, 16:16:44 »
В таком варианте работает, т.к. $переменная в двойных кавычках. Но это не удобно для длинных переменных (очень геморройно экранировать спец символы, если их много набирается).
« Последнее редактирование: 10 Февраля 2010, 16:19:13 от alexander.pronin »

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #8 : 14 Февраля 2010, 00:00:34 »
вот ошибка
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

говорит что не правильный синтаксис запроса. но вроде у меня все правильно(

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

Например, должно было быть что-то вроде того:

$valid_user = mysql_real_escape_string($valid_user);
$query="SELECT balans FROM `auth` WHERE `name`='$valid_user'";

Да и поле `name` должно быть уникальным.

нашел ошибку)
у меня $valid_user=0, хотя на самом деле не равна!! в ней логин юзера, но почему то он не передается( причем ни просто переменной, ни глобальной(

Если написать первой строкой в функции -- var_dump($valid_user); -- то что выведется?
Как функция вызывается и какие операции над переменной перед этим проводятся?


Понял, я такое проходил.
Сделайте
$sql='...WHERE name='.$valid_us";
Для примера.
$sql='SELECT '."count($tVar),"."min($tVar),"."max($tVar),"."max($tVar)-min($tVar),"."avg($tVar),"."sum($tVar)".' FROM '.$TypeQ.' WHERE (DateTime>"'.$beginDate." ".$beginTime.' ") AND (DateTime<"'.$endDate." ".$endTime.'");';

Ужас... :)


я сделал иначе. просто, взял и напрямую в скрипте из куки наполнил переменную и все заработало)))

$names=$_SESSION['authorized'];
mysql_connect("localhost", "root", "pass") or die(mysql_error());
mysql_select_db("bauth") or die(mysql_error());
mysql_query("SET NAMES 'cp1251'");
$query="SELECT `balans` FROM `auth` WHERE `name`=$names";
$result=mysql_query($query);
if(!$result)
{
  echo mysql_error();
}

while ($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
printf ("Ваш баланс: %s", $row["balans"]);
}

А что, в переменной $_SESSION['authorized'] хранится имя пользователя?

По порядку:
1. Переменная взята не из куки, а из сессии.
2. С большой вероятностью от такого кода может быть дырка в безопасности. Тем более, если имя бы бралось из куки.
3. Соединение с базой делается не в каждой функции, а один раз и в другом месте.


В таком варианте работает, т.к. $переменная в двойных кавычках. Но это не удобно для длинных переменных (очень геморройно экранировать спец символы, если их много набирается).

Переменная $valid_user и в первом посте была в двойных кавычках. И какой геморой может быть с функцией mysql_real_escape_string?
« Последнее редактирование: 14 Февраля 2010, 00:02:16 от unimix »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #9 : 16 Февраля 2010, 16:07:46 »
Ужас... :)
Да, с длинными sql такая жуть.
Не знаю как другие, а я стою на голове пока не заработает, а потом уже минимизировать кавычки нет никакого желания.
Работает и ладно.

Чуть не забыл самое главное (нау хау).
В терминале я выполняю кастрированный php скрипт с echo $sql;
для проверки корректности сконструированного $sql
« Последнее редактирование: 16 Февраля 2010, 17:02:31 от alexander.pronin »

Оффлайн $corpion

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
  • Ubuntu 9.10
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #10 : 28 Февраля 2010, 18:59:46 »
появился вопрос не совсем уже связанный с работой функции fetch_array, но близкий))

у меня в базе храняться ипишники юзеров в обычном виде - 192.168.1.1
но когда я делаю выборку
$query="SELECT `name`, `ip`, `adres` FROM `auth` WHERE `ip`=" . "$sip";
$result=mysql_query($query);
if(!$result)
{
  echo mysql_error();
}

while ($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
printf ("Логин: %s || ip: %s || адрес: %s <br>", $row["name"], $row["ip"], $row["adres"]);
}
то выдает ошибку:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.1.1' at line 1
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/billing/search.php on line 36
как я понял что-то не так из-за точек в ипишнике.

поэтому вопрос может есть какой-то другой способ хранить ипишники в базе. ИЛИ как можно исправить эту ошибку?? :o
Some kind of Monster

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: не работает функция mysql_fetch_array()
« Ответ #11 : 28 Февраля 2010, 22:53:10 »
Кавычки!

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.