Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in
 
 автор: alex_fear   (22.02.2011 в 16:39)   письмо автору
 
 

Добрый день есть база данных с параметрами
NAZ1 NAZWA LANG
$K#.D SG RU
$K#.d N-Serie RU

Как вывести данные по параметру NAZ1=$K#.D
вот пример запроса.

$result=mysql_query("select * from kat_naz WHERE NAZ1=$K#.D");
                                                 while($data1=mysql_fetch_array($result)){
$naz1=$data1['NAZWA'];
echo"$naz1";
}

Даже при такой таблице
NAZ1 NAZWA LANG
$###- BEDFORD RU
Даные все равно не выводятся!!)))))
Тоесть один параметр $###-
Данные не выводиться а выдает ошибку
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in
На скоклько я понимаю он не понимает регистр!
Как эту проблему решить?

  Ответить  
 
 автор: cheops   (22.02.2011 в 16:49)   письмо автору
 
   для: alex_fear   (22.02.2011 в 16:39)
 

Дело в том, что PHP и MySQL - это две разные среды, ошибки, которые возникают в MySQL, PHP не может показать при всем желании. Эти ошибки нужно обрабатывать специально, причем всегда - это позволит вам съэкономить массу времени. Понятно, что проверять состояние дескриптора $result лениво, особенно, когда все работает. Однако, такая проверка позволяет экономить огромное количество времени при отладке, вы всегда будете видить, что произошла ошибка на стороне MySQL и что это за ошибка. Попробуйте исправить код следующим образом
<?php
  $query 
"select * from kat_naz WHERE NAZ1=$K#.D";
  
$result=mysql_query($query); 
  if(!
$result) exit("Ошибка - ".mysql_error());
  if(
mysql_num_rows($result))
  {
    while(
$data1=mysql_fetch_array($result))
    { 
      
$naz1=$data1['NAZWA']; 
      echo
"$naz1"
    }
  }
?>

  Ответить  
 
 автор: alex_fear   (22.02.2011 в 17:08)   письмо автору
 
   для: cheops   (22.02.2011 в 16:49)
 

Вот ошибка 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

  Ответить  
 
 автор: cheops   (22.02.2011 в 17:19)   письмо автору
 
   для: alex_fear   (22.02.2011 в 17:08)
 

Обычно, еще хорошо выводить сам запрос, чтобы было понятно, как он выглядит. Когда возвращается такое сообщение, как правило, речь идет о кавычках (Trianon ниже уже написал об этом). В вашем случае, скорее всего, MySQL ожидает вместо
<?php
  $query 
"select * from kat_naz WHERE NAZ1=$K#.D";
?>
следующий запрос
<?php
  $query 
"select * from kat_naz WHERE NAZ1='$K#.D'";
?>

  Ответить  
 
 автор: alex_fear   (22.02.2011 в 17:22)   письмо автору
 
   для: cheops   (22.02.2011 в 17:19)
 

При кавычках выдает Unknown column '$K' in 'where clause'

  Ответить  
 
 автор: cheops   (22.02.2011 в 17:25)   письмо автору
 
   для: alex_fear   (22.02.2011 в 17:22)
 

Так, выведите запрос в окно браузера, как он выглядит?
<?php
  
echo $query;
?>

  Ответить  
 
 автор: alex_fear   (22.02.2011 в 18:32)   письмо автору
 
   для: cheops   (22.02.2011 в 17:25)
 

Вобщем сделал вот так

<?php 
$prob
='$K#.D';
  
$query "select * from kat_naz WHERE NAZ1='$prob'"
  
$result=mysql_query($query);  
  if(!
$result) exit("Ошибка - ".mysql_error()); 
  if(
mysql_num_rows($result)) 
  { 
    while(
$data1=mysql_fetch_array($result)) 
    {  
      
$naz1=$data1['NAZWA'];  
      echo
"$naz1";  
    } 
  } 
?>

И вроде заработало!

  Ответить  
 
 автор: cheops   (22.02.2011 в 18:47)   письмо автору
 
   для: alex_fear   (22.02.2011 в 18:32)
 

А, у вас $ просто символ, а не начало переменной? Тогда у вас работал бы и такой запрос
<?php
 $query 
'select * from kat_naz WHERE NAZ1="$K#.D"';
?>
и такой
<?php
 $query 
"select * from kat_naz WHERE NAZ1='\$K#.D'"
?>
Дело в том, что в двойных кавычках $ рассматривается как начало PHP-переменной и её нужно экранировать \ или помещать в одиночные кавычки, где такой интерпретации не происходит. Ваш вариант, безусловно, тоже верный.

  Ответить  
 
 автор: alex_fear   (23.02.2011 в 12:46)   письмо автору
 
   для: cheops   (22.02.2011 в 18:47)
 

Вобщем столкнулся с такой проблемой делаю вот такой запрос

$naz=$data1['NAZ'];
echo $naz ;
$result2=mysql_query("select * from kat_naz WHERE NAZ='$naz'");
         while($data2=mysql_fetch_array($result2)){

echo $data2['NAZ'];


параметр $data1['NAZ']=(bl
а выводит вот такой результат
$data2['NAZ']=(Bl(bL(bl
Хотя должно только (bl
Проблема с регистром((

  Ответить  
 
 автор: Trianon   (23.02.2011 в 12:49)   письмо автору
 
   для: alex_fear   (23.02.2011 в 12:46)
 

какой тип, кодировка и сопоставление регистров (collation) у поля kat_naz ?
если ..._ci (case insensitive / нечувствительно к регистру) - то ничего удивительного, в общем-то.

  Ответить  
 
 автор: alex_fear   (23.02.2011 в 12:53)   письмо автору
 
   для: Trianon   (23.02.2011 в 12:49)
 

ОК

  Ответить  
 
 автор: alex_fear   (23.02.2011 в 13:16)   письмо автору
 
   для: Trianon   (23.02.2011 в 12:49)
 

И еще как заставить воспринемать вот такой символ ',J
если задаю параметр

$naz='',J';
mysql_query("select * from kat_naz WHERE NAZ='$naz'")

Оно ',J воспринемает как " как это убрать?

  Ответить  
 
 автор: Trianon   (23.02.2011 в 13:36)   письмо автору
 
   для: alex_fear   (23.02.2011 в 13:16)
 

Литеральный php-текст, перед тем, как обрамить его апострофами, необходимо подвергнуть экранированию спецсимволов. Делается это путем добавления \ перед каждым \ ' "

Литеральный SQL-текст, перед тем, как обрамить его апострофами, необходимо подвергнуть экранированию спецсимволов. Делается это путем добавления \ перед каждым \ ' " и некоторыми другими. Обычно применяется функция mysql_real_escape_string()

  Ответить  
 
 автор: alex_fear   (23.02.2011 в 14:33)   письмо автору
 
   для: Trianon   (23.02.2011 в 13:36)
 

Проблему пока решил но кажится что не будет экранировать % _ вот эти знаки? Или я не прав?

  Ответить  
 
 автор: Trianon   (23.02.2011 в 14:40)   письмо автору
 
   для: alex_fear   (23.02.2011 в 14:33)
 

их и не требуется экранировать,.
Как минимум пока Вы не решаете задачу создания шаблона для операции LIKE.
Если Вы LIKE не применяете, символы % и _ являются самыми обычными, не специальными.
То же самое касается левого операнда этой операции.

  Ответить  
 
 автор: Trianon   (22.02.2011 в 16:52)   письмо автору
 
   для: alex_fear   (22.02.2011 в 16:39)
 

строковые константы в SQL-запросе нужно в кавычки заключать.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования