LINUX.ORG.RU

Luasql. Insert с переменными.

 , ,


0

0

lua не знаю, от программирования далек. Но приходится возиться.

Суть такова: Есть luasql.mysql, есть переменные, есть база. Согласно примеру:

static,errorString = conn:execute([[ INSERT INTO table_name(field1, field2) VALUES ('f1', 'f2')]])
Записывает в поля базы буковки f1 и f2, а не значение переменной. Либо null или ошибку синтаксиса если шаманить с @f1 , '$f1' и тд.

Какой должен быть синтаксис, как правильно записать в данном случае, если танцы с кавычками и всякими $,@,#,% не принесли результата?

Заранее благодарен.


Посмотрел на этот luasql, они предлагают использовать конкатенацию строк и conn:escape… Если есть возможность, я бы посоветовал сменить luasql на что-нибудь другое.

А не, всё нормально, невнимательно посмотрел:

conn:execute([[ INSERT INTO table_name(field1, field2) VALUES ('%s', '%s')]], f1, f2)

Всё равно подозрительно что '%s' у них в кавычках. Мне кажется стоит поискать замену этому luasql если есть возможность.

PolarFox ★★★★★ ()
Последнее исправление: PolarFox (всего исправлений: 1)
Ответ на: комментарий от PolarFox

Действительно подозрительная конструкция... Громаднейшее спасибо, побежал пробовать. Насчет заменить luasql, я немного погуглил, но ничего относительно свежего не обнаружил, потому как буквально два дня изучением lua занимаюсь, только - только начал хоть что-то понимать.

ulver ()
Последнее исправление: ulver (всего исправлений: 1)
Ответ на: комментарий от PolarFox

Пользуясь случаем спрошу, если конечно не трудно, не могли бы Вы пояснить, почему в Lua массив начинается с единицы? И какие в этом преимущества, если они есть?

portquest2016 ()
Ответ на: комментарий от portquest2016

почему в Lua массив начинается с единицы

Просто так. По аналогии с математикой. Преимуществ особых нет, кроме привычности для непрограммистов, есть недостаток — при суммировании индексов и смещений проще нарваться на ошибку, так как часто нужно дописывать - 1 в расчётах с индексами.

PolarFox ★★★★★ ()
Ответ на: комментарий от ulver

Ну тогда разве что по старинке как в каком-то древнем рнр:

conn:execute("INSERT INTO table_name(field1, field2) VALUES ('" .. conn:escape(f1) .. "', '" .. conn:escape(f2) .. "')")

Чуть руки не вывихнул, пока писал :)

Код из примера не сильно лучше:

  res = assert (con:execute(string.format([[
    INSERT INTO people
    VALUES ('%s', '%s')]], p.name, p.email)
  ))

Надеюсь, понятно почему это очень хреновый код?

PolarFox ★★★★★ ()
Последнее исправление: PolarFox (всего исправлений: 1)
Ответ на: комментарий от PolarFox

Вроде и рад, что работает, но... Это отвратительно.

Если вдруг наткнетесь на что-то получше касательно lua+mysql (postgresql) - дайте знать, а то я свихнусь от этих кавычек и точек.

ulver ()
Последнее исправление: ulver (всего исправлений: 1)
Ответ на: комментарий от PolarFox

А можно чуточку подробнее о string.format -е в этой ситуации? Я почитал про этот тип представления, но тут же запутался в скобках...

ulver ()
Последнее исправление: ulver (всего исправлений: 1)
Ответ на: комментарий от PolarFox

О, все оказалось намного проще. Так выглядит уже лучше!

Премного вам благодарен. А то я уже часа три пытаюсь в этом разобраться.

ulver ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.