[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Названия столбцов в качестве переменной
XELAD
Доброго времени суток!
ЗАДАЧА: составить название столбца в таблице БД mySQL из присланного smth + слова (здесь: col).
$id = $_POST['id'];
$someNum = $_POST['num'];

$someIndex = $_POST['smth'];
$colName = 'col'.$someIndex;

$result = mysql_query("UPDATE MY_TABLE SET '$colName'='$colName'+'$someNum' WHERE ID='$id'");

Конструкция выше не сработает, т.к. sql берёт $colName за название столбца (не значение).
Пробовал по-разному, в том числе пользовательские переменные sql
mysql_query("SET @c='$colName'; UPDATE MY_TABLE SET @c=@c+'$someNum'  WHERE ID='$id'");

Но, видимо, неправильно.

Буду очень благодарен тому, кто расскажет, как это должно было быть правильно написано. Спасибо!
Kopipaster
надо разорвать строку
mysql_query("SET @c='$colName'; UPDATE MY_TABLE SET @c=@c+'".$someNum."'  WHERE ID='$id'");
Valick
$result = mysql_query("UPDATE MY_TABLE SET `$colName`='$colName"."$someNum'  WHERE ID='$id'");


_____________
Стимулятор ~yoomoney - 41001303250491
XELAD
Думаю, я не очень чётко описал задачу.

$someIndex = $_POST['smth'];
$colName = 'col'.$someIndex;
Значение $colName это и есть название столбца. Возможно, неверно составленное или использованное.

$someNum = $_POST['num'];
Значение $someNum это число, которое нужно прибавить к числу, уже имеющемуся в нужном столбце и строке с нужным ID.

Вышеописанная операция раньше достигалась мною в запросе к mySQL путём
названиеСтолбца=названиеСтолбца+'phpПеременная'
(Не нашёл информации, работает ли в mySQL += , -= и тд).
P.S. тип поля bigint
Valick
$result = mysql_query("UPDATE MY_TABLE SET `$colName`=`$colName` + $someNum  WHERE ID='$id'");

но в принципе скорее всего БД спроектирована неправильно

_____________
Стимулятор ~yoomoney - 41001303250491
veos
mysql_query("UPDATE `MY_TABLE` SET `{$colName}` = `{$colName}` + {$someNum} WHERE `ID` = {$id}");

Не забывай обрабатывать данные перед запросом.
XELAD
To Valick
БД составлена верна, так как при простом запросе:
mysql_query("UPDATE MY_TABLE SET col1=col1+'$someNum' WHERE ID='$id'");

всё работает на ура.
Не работает лишь динамическое создание имени в зависимости от входных данных.
$colName имеет верное значение, col1 , судя по print. Запрос выполняется, но столбец такой не найден. Как мне узнать, какое в реальности имя пытаются найти в таблице? Спасибо!
Kopipaster
Цитата (XELAD @ 11.05.2014 - 19:33)
Не работает лишь динамическое создание имени в зависимости от входных данных.
$colName имеет верное значение, col1 , судя по print. Запрос выполняется, но столбец такой не найден. Как мне узнать, какое в реальности имя пытаются найти в таблице? Спасибо!

Да что ты чёрт возьми пытаешься то сделать то?
ты понимаешь что этот запрос делает?
если у тебя таблица:
+---------------------+
-------
MY_TABLE--------
+-----+---------------+
|
id | col1(int) |
+-----+---------------+
|
1 | 10 |
|
2 | 30 |
|
3 | 40 |

а у тебя запрос:
$id = '2';
$someNum = '5';
mysql_query("UPDATE `MY_TABLE` SET `col1`=`col1`+'$someNum' WHERE `id`='$id'");

то результат запроса превратит:
+---------------------+
-------
MY_TABLE--------
+-----+---------------+
|
id | col1(int) |
+-----+---------------+
|
1 | 10 |
|
2 | 35 |
|
3 | 40 |

ну а если у тебя запрос:
$id = '2';
$someNum = 'col1';
mysql_query("UPDATE `MY_TABLE` SET `col1`=`col1`+'$someNum' WHERE `id`='$id'");

то результат запроса вообще ничего не изменит так как нельзя прибавлять строку к числу

ну а если у тебя таблица:
+---------------------+
-------
MY_TABLE--------
+-----+---------------+
|
id | col1(varchar) |
+-----+---------------+
|
1 | pp |
|
2 | rr |
|
3 | tt |

а у тебя запрос:
$id = '2';
$someNum = '5';
mysql_query("UPDATE `MY_TABLE` SET `col1`=`col1`+'$someNum' WHERE `id`='$id'");

то результат запроса будет :
+---------------------+
-------
MY_TABLE--------
+-----+---------------+
|
id | col1(varchar) |
+-----+---------------+
|
1 | pp |
|
2 | 0 |
|
3 | tt |

Ну и наконец
если у тебя таблица:
+---------------------+
-------
MY_TABLE--------
+-----+---------------+
|
id | col1(int) |
+-----+---------------+
|
1 | 10 |
|
2 | 30 |
|
3 | 40 |

а у тебя запрос:
$id = '2';
$someNum = 'col1';
mysql_query("UPDATE `MY_TABLE` SET `col1`=`col1`+`".$someNum."` WHERE `id`='$id'");

то результат запроса превратит:
+---------------------+
-------
MY_TABLE--------
+-----+---------------+
|
id | col1(int) |
+-----+---------------+
|
1 | 10 |
|
2 | 60 |
|
3 | 40 |
Быстрый ответ:

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