[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка в sql update
Dmitriy_R
Народ, укажите пожалуйста на мою ошибку....

есть такая фунция:

public function update($data, $table, $where)
{
foreach($data as $colum=>$val)
{
$sql="UPDATE $table SET $colum=$val WHERE $where";
$resul=mysql_query($sql) or die(mysql_error());

}
return true;
}


есть такой запрос (имя таблицы и условие указанно верно)

update(array("views_on_life"=>"пофигист"), 'users_anket_data', "user_id=".$usr->id);


на что база данных вадает ответ

Unknown column 'пофигист' in 'field list'


почему он берет "пофигист", как название ячейки, а не значение?

пс. если место букв писать цифры все проходит



Спустя 2 минуты, 44 секунды (29.01.2010 - 19:07) DedMorozzz написал(а):
возьми колонку в кавычки `` , а не '' и не "", а значения в такие ''

Спустя 23 минуты, 44 секунды (29.01.2010 - 19:31) Dmitriy_R написал(а):
поправьте меня если делаю что то не так



update( array(`views_on_life`=> 'пофигист'), 'users_anket_data', "user_id=".$usr->id);




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 '=пофигист WHERE user_id=1' at line 1

Спустя 23 минуты, 23 секунды (29.01.2010 - 19:54) Dmitriy_R написал(а):
DedMorozzz, спасибо что подсказал куда надо копать, запрос надо писать такой:


update( array("views_on_life"=> "'пофигист'"), 'users_anket_data', "user_id=".$usr->id);

Спустя 51 секунда (29.01.2010 - 19:55) Ice написал(а):
Цитата (Dmitriy_R @ 29.01.2010 - 20:31)
поправьте меня если делаю что то не так



update( array(`views_on_life`=> 'пофигист'), 'users_anket_data', "user_id=".$usr->id);




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 '=пофигист WHERE user_id=1' at line 1

В самом запросе кавычки, в самооом)))

Хотя... хотя... если всё так круто, я бы вообще хранимую процедуру создал в базе и вызывал бы ее - налицо чистота кода и безопасность + чёткая иерархия того, кто чем занимается...

Спустя 3 минуты, 7 секунд (29.01.2010 - 19:58) ИНСИ написал(а):
Dmitriy_R я сделал вот так:

$arr = array(3,8,15,25,16,11,10,5,7,30);
foreach($arr as $list => $val) echo $list;


у меня нормально вывелись индексы. И твой код по идее должен работать

Спустя 25 минут, 31 секунда (29.01.2010 - 20:24) ИНСИ написал(а):
попробуй так:
public function updateData($table, $data, $where)
{
foreach($data as $list => $val)
{
$result = mysql_query("UPDATE `{$table}` SET `{$list}` = '{$val}' WHERE {$where}") or die(mysql_error());
}
return true;
}


updateData(array('views_on_life' => 'пофигист'), 'users_anket_data', 'user_id='.$usr->id);

Спустя 4 минуты, 45 секунд (29.01.2010 - 20:28) Dmitriy_R написал(а):
welbox2 огромное спасибо! все работает!

Спустя 4 минуты, 51 секунда (29.01.2010 - 20:33) ИНСИ написал(а):
Dmitriy_R smile.gif

Спустя 14 минут, 20 секунд (29.01.2010 - 20:48) Dmitriy_R написал(а):
Может кому пригодится (а скорее для себя что бы не забыть )выложу полный скрипт:

создаем массив с полями анкеты

$dtp = array("sex","marital_status","birth","views_on_life","political_views",
"city","phone","icq","skape","favorite_music","favorite_movies","my_hobbies","my_favorite_phrase","school","secondary","special_education",
"higher_education","cafe","cinema","shop","gym");



перебираем значения названий колонок таблицы по порядку, проверяется,
есть ли значение $_POST и и если значения $_POST отличается
от значения ранее загруженных данных $ank_data[''.$dtp[$ii], то содается массив где колонка имеет имени нужного поля, а значение
берется из $_POST
for ($ii=0;$ii<=20;$ii++)
{

if(isset($_POST[''.$dtp[$ii].'']) && $_POST[''.$dtp[$ii].'']!=$ank_data[''.$dtp[$ii].'']) $data[''.$dtp[$ii].'']=$_POST[''.$dtp[$ii].''];
}


массив передается в функцию updateData
$db->updateData( $data, 'users_anket_data', "user_id=".$usr->id);


и собственно апдейдится нужная таблица

public function updateData($table, $data, $where)
{
foreach($data as $list => $val)
{
$result = mysql_query("UPDATE `{$table}` SET `{$list}` = '{$val}' WHERE {$where}") or die(mysql_error());
}
return true;
}


Спасибо всем кто помог и принимал участие в обсуждении!

Спустя 9 минут, 41 секунда (29.01.2010 - 20:57) ИНСИ написал(а):
Dmitriy_R, вот это очень странно smile.gif очень smile.gif

if(isset($_POST[''.$dtp[$ii].'']) && $_POST[''.$dtp[$ii].'']!=$ank_data[''.$dtp[$ii].''])     $data[''.$dtp[$ii].'']=$_POST[''.$dtp[$ii].''];

Спустя 51 секунда (29.01.2010 - 20:58) arlamar написал(а):
получается, что бы изменить 5 полей в таблице ты выполнишь 5 запросов?))

исправь вот так:
public function updateData($table, $data, $where)
{
$updates = array();
foreach($data as $list => $val)
{
$updates[] = "`$list` = '$val'";
}
$set = implode(', ', $updates);
mysql_query("UPDATE `$table` SET $set WHERE $where") or die(mysql_error());
return true;
}

Спустя 8 минут, 9 секунд (29.01.2010 - 21:06) Dmitriy_R написал(а):
welbox2, а чем странность? arlamar, спасибо!

Спустя 2 минуты, 52 секунды (29.01.2010 - 21:09) Kuliev написал(а):
Цитата (Dmitriy_R @ 29.01.2010 - 23:06)
welbox2, а чем странность? arlamar, спасибо!


if(isset($_POST[''.$dtp[$ii].'']) && $_POST[''.$dtp[$ii].'']!=$ank_data[''.$dtp[$ii].'']) $data[''.$dtp[$ii].'']=$_POST[''.$dtp[$ii].''];


Зачем ' понаставил (в смысле конкатенация здесь не нужна) да и в ней используют " ковычки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.