Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

кривой SQL запрос

1.6K
17 июля 2008 года
Shtirlitz
145 / / 31.07.2006
Доброго времени суток!
Никак не могу вспомнить как правильно состовляется SQL запрос в PHP. Пробую так:
 
Код:
$type="My type";
$text="My text";
$sql="INSERT INTO index SET type='".$type."', text='".$text."'";
mysql_query($sql) or die(mysql_error());

Выдает ошибку:
Цитата:

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 'index SET type='My type', text='My text'' at line 1


Перепробовал кучу вариантов и всегда одна ошибка, подскажите что не так.Заранее благодарен.

244
17 июля 2008 года
UAS
2.0K / / 19.07.2006
А чем мешает
 
Код:
$sql="INSERT INTO `index`(`type`,`text`) ('".$type."','".$text."'");

Ну и вообще. Тут все криво. Такие имена как INDEX (index так же), text и т.д. - это зарезервированные именна. В кавычки возьмите
1.6K
17 июля 2008 года
Shtirlitz
145 / / 31.07.2006
А используя мою форму запроса можно как нибудь сделать?
Сдесь снова ошибка возникает только уже php, якобы скобка лишняя.
244
17 июля 2008 года
UAS
2.0K / / 19.07.2006
не знаю. у меня все робит. создал таблицу:
 
Код:
CREATE TABLE `index` (
`type` TEXT,
`text` TEXT
);

заслал запрос:
 
Код:
mysql_query("INSERT INTO `index` SET `type`='qqqq', text='wwwwww'");

все работает норм.

в том посте выше, просто забыл закрывающую скобку в последнем выражении.
 
Код:
$sql="INSERT INTO `index`(`type`,`text`) VALUES('".$type."','".$text."')");


и не используйте желательно зарезервированные слова в именнах таблиц и полей, на всякий случай.
420
17 июля 2008 года
Fobos
197 / / 10.03.2006
Вообще, насколько я знаю нужно не
 
Код:
$sql="INSERT INTO `index`(`type`,`text`) ('".$type."','".$text."'");

а
 
Код:
$sql="INSERT INTO `index`(`type`,`text`) VALUES ('$type','$text.')";


Заметте, что если весь запрос обрамлён в двойный ковычки, то совсем не обязательно имена переменных типа $type выносить за их пределы методом ".$type."

Без такой конструкции даже удобнее, правда если работаете не с notepad а с каким-нибудь специализированным редактором php (например ZDE) с хорошим парсером подсветки синтаксиса.

Теоретико-практический пример :) :
1.
 
Код:
$value = "Текст ".$val2." Текст2";

2.
 
Код:
$value = "Текст $val2 Текст2";

3.
 
Код:
$value = 'Текст $val2 Текст2';


В приведённых выше примерах первые 2 абсолютно идентичны, но 2-й проще записан.

А 3-й возвратит в переменную не значение $val2, а просто текст $val2, т.к. там одинарные ковычки.

Ну это так... Просто почему-то все пишут как в примере 1, а не как в примере 2, хотя пример 2 проще. ИМХО.
1.9K
17 июля 2008 года
InterWen
331 / / 16.09.2006
Цитата: Fobos
Ну это так... Просто почему-то все пишут как в примере 1, а не как в примере 2, хотя пример 2 проще. ИМХО.



ИМХО, не сказал бы. Ну вот даже тут на форуме выигрывает первый вариант в силу наглядности (в третьем переменная вбитая в закавыченную двойными кавычками строку не подсвечивается ;) ).
Да и $val2 из трех примеров выше потенциально может быть какого угодно типа, отсюда, если по логике, то конкатенация оператором "." выглядит уместней.

244
17 июля 2008 года
UAS
2.0K / / 19.07.2006
Fobos, нююю во-первых тема не той направленности, где идет обсуждения привычки конкатенации. А во-вторых разницы никакой, да и работает быстрее мой вариант, хотя не суть.
А если уже писать переменный внутри строки, то тогда уж обрамлять её "{}", вот тогда действительно будет наглядно.

ЗЫ: от того как написать SQL-запрос, вашим методом или моим - разницы нет. Строка запроса в итоге все равно будет одна и та же
420
18 июля 2008 года
Fobos
197 / / 10.03.2006
[QUOTE=InterWen]
в третьем переменная вбитая в закавыченную двойными кавычками строку не подсвечивается.
[/QUOTE]
Гы, а у меня в ZendStudio-5.5.1 подсвечивается прекрастно :)
Вообще, наверное это кому как по душе писать. Я просто привык уже так.
Просто я хотел сказать, что так можно.
[QUOTE=UAS]нююю во-первых тема не той направленности, где идет обсуждения привычки конкатенации. А во-вторых разницы никакой, да и работает быстрее мой вариант, хотя не суть.[/QUOTE]

Да это я пока писал немного отвлёкся :) Прошу прошения.
Смысл моего сообщения был в том, что нужно между скобками в запросе INSERT писать VALUES. Я просто думал опечатались. Я без этого не пробовал, но поидее же нужно, или можно и без этого зарезервированного слова? :)
244
18 июля 2008 года
UAS
2.0K / / 19.07.2006
Цитата: Fobos
Прошу прошения.
Смысл моего сообщения был в том, что нужно между скобками в запросе INSERT писать VALUES. Я просто думал опечатались. Я без этого не пробовал, но поидее же нужно, или можно и без этого зарезервированного слова? :)


Вот тут каюсь) Сделал опечатку) Ну вообщем если бы человек, который открыл топик, почитал бы мануал, то все бы решилось за 2 минуты =)
На скорую руку часто опечатываюсь.:(

[COLOR="Silver"][SIZE="1"]ЗЫ: спс, подправил ошибку[/SIZE][/COLOR]:)

304
18 июля 2008 года
Fenyx
707 / / 26.01.2005
я пишу обычно
$str="Текст {$arr} Текст";//
Суть в том что можно без разрыва строк вставлять элементы массива, а по скорости уж не поверю что имено определение строки играет такую существенную роль на быстродействие, а вот на разбор кода очень сильно. Этот миф наверно еще с пхп4 идет, если не 3
1.6K
19 июля 2008 года
Shtirlitz
145 / / 31.07.2006
Цитата:
Ну вообщем если бы человек, который открыл топик, почитал бы мануал, то все бы решилось за 2 минуты =)


Смотрел и не раз! К сожалению там есть разница с Вашим запросом. Так что спасибо Вам за помощь, теперь все работает!

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог