Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в запросе, но где она? 
:(
    Опции темы
champion
Дата 2.8.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



MySQL выдаёт такую ошибку:
Цитата

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

Делаю такой запрос:
Код

INSERT INTO `moders` ( `userid` , `sitep` , `chatp` , `editp` , `duser` , `banu` , `pinok` ) VALUES (51,'1','0','1','0','0','0')

Который формируется так:
Код

$SQL=($crows==0) ? "INSERT INTO `moders` (   `userid` , `sitep` , `chatp` , `editp` , `duser` , `banu` ,  `pinok` ) VALUES (".$_GET['editinfo']."," : "UPDATE `moders` set ";
if(isset($_POST['sitep'])) $SQL.=($crows==0) ? "'1'," : "`sitep`='1'," ; else $SQL.=($crows==0) ? "'0'," : "`sitep`='0'," ;
if(isset($_POST['chatp'])) $SQL.=($crows==0) ? "'1'," : "`chatp`='1'," ; else $SQL.=($crows==0) ? "'0'," : "`chatp`='0'," ;
if(isset($_POST['editp'])) $SQL.=($crows==0) ? "'1'," : "`editp`='1'," ; else $SQL.=($crows==0) ? "'0'," : "`editp`='0'," ;
if(isset($_POST['banu']))  $SQL.=($crows==0) ? "'1'," : "`banu`='1'," ;  else $SQL.=($crows==0) ? "'0'," : "`banu`='0'," ;
if(isset($_POST['duser'])) $SQL.=($crows==0) ? "'1'," : "`duser`='1'," ; else $SQL.=($crows==0) ? "'0'," : "`duser`='0'," ;
if(isset($_POST['pinok'])) $SQL.=($crows==0) ? "'1'," : "`pinok`='1'," ; else $SQL.=($crows==0) ? "'0'," : "`pinok`='0'," ;
$SQL{(strlen($SQL)-1)}="";
$SQL.=($crows==0)? ")" : " where `userid` = '".$_GET['editinfo']."'" ;
mysql_query($SQL) or $kernel->error(mysql_error()."<br><font color=black><b>SQL:</b> ".$SQL);

В чем ошибка?

Это сообщение отредактировал(а) champion - 2.8.2006, 08:20


--------------------
user posted image
PM MAIL   Вверх
Drache
Дата 2.8.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 31.3.2006

Репутация: нет
Всего: 3



запрос точно такой получается? выведи на экран $SQL.
И вообще зачем же так извращаться? smile
insert поддерживает точно такой же синтаксис как и update (я имею в виду set).
Поэтому проверку ($crows==0) можно делать только один раз в начале, а дальше уже в любом случае писать все по типа $field=$value.
PM MAIL   Вверх
champion
Дата 2.8.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 26.1.2005

Репутация: нет
Всего: 2



Цитата(Drache @  2.8.2006,  11:45 Найти цитируемый пост)
запрос точно такой получается? выведи на экран $SQL.

Цитата(champion @  2.8.2006,  08:14 Найти цитируемый пост)
mysql_query($SQL) or $kernel->error(mysql_error()."<br><font color=black><b>SQL:</b> ".$SQL);

Цитата(champion @  2.8.2006,  08:14 Найти цитируемый пост)
INSERT INTO `moders` ( `userid` , `sitep` , `chatp` , `editp` , `duser` , `banu` , `pinok` ) VALUES (51,'1','0','1','0','0','0')


Добавлено @ 13:51 
Цитата(Drache @  2.8.2006,  11:45 Найти цитируемый пост)
insert поддерживает точно такой же синтаксис как и update (я имею в виду set).

Подейтсвовал по вашему совету, проблема решилась, но, я так и не понял, в чем причина предыдущей ошибки. 
Вот как видоизменился код.
Код

$SQL=($crows==0) ? "INSERT INTO `moders` SET `userid`=".$_GET['editinfo']."," : "UPDATE `moders` set ";
if(isset($_POST['sitep'])) $SQL.="`sitep`='1'," ; else $SQL.="`sitep`='0'," ;
if(isset($_POST['chatp'])) $SQL.="`chatp`='1'," ; else $SQL.="`chatp`='0'," ;
if(isset($_POST['editp'])) $SQL.="`editp`='1'," ; else $SQL.="`editp`='0'," ;
if(isset($_POST['banu']))  $SQL.="`banu`='1'," ;  else $SQL.="`banu`='0'," ;
if(isset($_POST['duser'])) $SQL.="`duser`='1'," ; else $SQL.="`duser`='0'," ;
if(isset($_POST['pinok'])) $SQL.="`pinok`='1'," ; else $SQL.="`pinok`='0'," ;
$SQL{(strlen($SQL)-1)}="";
$SQL.=($crows==0)? ")" : " where `userid` = '".$_GET['editinfo']."'" ;
mysql_query($SQL) or $kernel->error(mysql_error()."<br><font color=black><b>SQL:</b> ".$SQL);



--------------------
user posted image
PM MAIL   Вверх
Drache
Дата 2.8.2006, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 31.3.2006

Репутация: нет
Всего: 3



совет (может понравится):
1. В формочке задавать только те поля, которые будут заноситься в БД (под такими же названиями) или же разбивать всю форму на массивы (если предполагается заполнение не одной таблицы или не одним запросом).
2. запрос оформлять таким макаром:

Код

if($crows == 0){
  $sql = "insert into `some_table` set ";
}else{
  $sql = "update `some_table` set ";
}
foreach($_POST['data'] as $field => $value){
  $sql .= "`$field`='$value', ";
}
$sql = substr($q, 0, -2);

if($crows != 0){
  $q .= "where `userid`=".$_GET['editinfo']."'";
}


Можешь вообще все это вынести в отдельную ф-цию, которой будешь только передавать массив данных ($_POSt['data']), имя таблицы ('some_table') и если есть - ключик к обновлению ($crows).
Ф-ция, думаю пригодится.

Плюс добавить осталось экранирование ВСЕХ данных - не доверяй данным, введенным в формочку. Здесь в помощь mysql_escape_string();

Где ошибка в твоем предыдущем варианте кода - не знаю, может вообще просто опечатка, которую никак не можем заметить.



Это сообщение отредактировал(а) Drache - 2.8.2006, 14:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1202 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.