Перейти к содержимому


Партнерская программа Kredov

Переменная в запросе к БД

#1 Вячеслав

Вячеслав
  • Пользователь
  • 357 сообщений
  • Репутация: 0
0

Отправлено 19 Август 2009 - 03:29

Подскажите как засунуть переменную в запрос к БД?

Тоесть мне нужно чтоб в запрос подставлялось значение переменной = названию таблицы в БД

Код:

if($_GET['id']){$id = $_GET['id'];}

if(isset($_GET['article'])){$sql_tabl='article';}
if(isset ($_GET['news'])){$sql_tabl='news';}
if(isset ($_GET['grafic'])){$sql_tabl='grafic';}
if(isset ($_GET['download'])){$sql_tabl='download';}
if(isset ($_GET['lesson'])){$sql_tabl='lesson';}


$result = mysql_query ("SELECT * FROM '$sql_tabl' WHERE id='$id'",$db);
$myrow = mysql_fetch_array ($result);

echo'<meta name="keywords" content="'.$myrow ["meta_k"].'">
<meta name="description" content="'.$myrow ["meta_d"].'">';




тоесть как правильно прописать
'$sql_tabl'
?

Или это вообще не так делается?
Зарание спасибо!

 

 

  • 0

#2 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 19 Август 2009 - 10:25

Попробуй взять '$sql_tabl' в двойные кавычки "$sql_tabl"
  • 0


#3 psiallon

psiallon
  • Пользователь
  • 14 сообщений
  • Репутация: 0

Отправлено 19 Август 2009 - 11:10

$result = mysql_query ("SELECT * FROM {$sql_tabl} WHERE id='$id'",$db);

Там вообще никаких кавычек не должно быть!
  • 0

#4 ilyazh

ilyazh
  • Пользователь
  • 356 сообщений
  • Репутация: 1

Отправлено 19 Август 2009 - 11:23

psiallon, Почему? Можно без проблем записать в виде '$sql_table' и будет работать. =)


  • 0

#5 Евгений

Евгений
  • Пользователь
  • 481 сообщений
  • Репутация: 0

Отправлено 19 Август 2009 - 11:27

$result = mysql_query ("SELECT * FROM ".$sql_tabl." WHERE id='".$id."'",$db);

  • 0

#6 Вячеслав

Вячеслав
    Topic Starter
  • Пользователь
  • 357 сообщений
  • Репутация: 0

Отправлено 19 Август 2009 - 11:55

Спасибо большое!!!

написал вот так:

if(isset($_GET['article'])){$sql_tabl='article';}
if(isset ($_GET['news'])){$sql_tabl='news';}
if(isset ($_GET['grafic'])){$sql_tabl='grafic';}
if(isset ($_GET['download'])){$sql_tabl='download';}
if(isset ($_GET['lesson'])){$sql_tabl='lesson';}


$result = mysql_query ("SELECT * FROM ".$sql_tabl." WHERE id='$id'",$db);
$array_k_d = mysql_fetch_array ($result);


Все работает отлично!!!

И так мы сократили обьем кода с:

if(isset($_GET['article'])){$result = mysql_query ("SELECT meta_k,meta_d FROM article WHERE id='$id'",$db);}
if(isset ($_GET['news'])){$result = mysql_query ("SELECT meta_k,meta_d FROM news WHERE id='$id'",$db);}
if(isset ($_GET['grafic'])){$result = mysql_query ("SELECT meta_k,meta_d FROM grafic WHERE id='$id'",$db);}
if(isset ($_GET['download'])){$result = mysql_query ("SELECT meta_k,meta_d FROM download WHERE id='$id'",$db);}
if(isset ($_GET['lesson'])){$result = mysql_query ("SELECT meta_k,meta_d FROM lesson WHERE id='$id'",$db);}

$array_k_d = mysql_fetch_array ($result);


до:

if(isset($_GET['article'])){$sql_tabl='article';}
if(isset ($_GET['news'])){$sql_tabl='news';}
if(isset ($_GET['grafic'])){$sql_tabl='grafic';}
if(isset ($_GET['download'])){$sql_tabl='download';}
if(isset ($_GET['lesson'])){$sql_tabl='lesson';}


$result = mysql_query ("SELECT * FROM ".$sql_tabl." WHERE id='$id'",$db);
$array_k_d = mysql_fetch_array ($result);


Всем спасибо :rolleyes:
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 19 Август 2009 - 12:19

Вячеслав, учимся оформлять код(читаем тему подсветка кода)

Вообще то что находится в PHP между " и " обычно называется строкой(за исключением ключей в массивах и доступов к состояниям объекта).
И то что ты спрашиваешь называется обычной конкатенацией строк.
Все пишут на свой вкус. PHP запросто понимает все варианты:
"SELECT * FROM {$sql_tabl} WHERE id={$id}" # обычно тоже так пишу
"SELECT * FROM $sql_tabl WHERE id=$id"
"SELECT * FROM ". $sql_tabl ." WHERE id=". $id
'SELECT * FROM '. $sql_tabl .' WHERE id='. $id

Чем же хорош первый вариант:
1) Удобочитаемость кода
2) Запросто можно вставить $array['key'] вместо $array[key] - экономится время на обращение к константной области.
  • 0

#8 psiallon

psiallon
  • Пользователь
  • 14 сообщений
  • Репутация: 0

Отправлено 19 Август 2009 - 12:25

Почему? Можно без проблем записать в виде '$sql_table' и будет работать. =)

Ошибаетесь, для названий таблиц, полей и т.п., нужно использвовать обратный апостроф, а не прямой, как вы говорите!
  • 0

#9 ilyazh

ilyazh
  • Пользователь
  • 356 сообщений
  • Репутация: 1

Отправлено 19 Август 2009 - 12:49

я всю жизнь использую такой апостроф и всё работает нормально. Как сказал Зитос - php работает со всякими апострофами.
  • 0

#10 psiallon

psiallon
  • Пользователь
  • 14 сообщений
  • Репутация: 0

Отправлено 19 Август 2009 - 13:23

При чем тут PHP :rolleyes: , я говорю про SQL запрос, у Вячеслава была ошибка в том, что переменная (имя таблицы) была заключена в прямой апостроф, а в sql для названия таблиц нужно либо опускать апострафы вообще, либо использовать обратные! И вы в своем первом посте, опять-же советуете человеку допустить ошибку, которую я ему посоветовал исправить!.. И с конкатенацией строк у него проблем не было, там было все сделано верно!
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru