powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите, не могу найти ошибку INSERT INTO=((((
30 сообщений из 30, показаны все 2 страниц
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352236
Synov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фрагмент кода:

//Получаю данные формы
$site_name = $_POST['site-name'];//В это поле ввожу, например SITENAME


//Делаю запрос
$my_query ='INSERT INTO config ( site_name) VALUES ('.$site_name.');';
mysql_query($my_query,$db);

Когда запускаю обработчик мне выдает:


Ошибка записи в таблицу config: Unknown column 'SITENAME' in 'field list'
_______________________________
Где я слепой не могу найти ошибку ?
Вроде синтаксис правильный же
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352242
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synov,

SynovГде я слепой не могу найти ошибку ?

Так и есть, натурально, слепой.
Выведи получившийся текст запроса, может рассмотришь
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352277
Synov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikkiMouse,
Выводит, все как по источнику, где я изучал синтаксис....
INSERT INTO config( site_name ) VALUES (SITENAME);
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352286
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synov,

Что за источник? В печку ее немедленно :) (с) Профессор Преображенский

Вот источник - MySQL :: MySQL 5.1 Reference Manual :: 13.2.5 INSERT Syntax
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352294
Synov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikkiMouse,

INSERT INTO sklad (no,name) VALUES (3,'Монитор');

Вот самый простой пример из источника, чем мой запрос то отличается ?
Скобками для текста, как: 'Монитор' ?

Источник http://www.php.su/lessons/?lesson_9
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352306
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synov,

Именно, молодой человек, именно ими и отличается )))
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352309
Synov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MikkiMouse,

Я пробовал делать так вначале

$site_name = '$_POST[\'site-name\']';

Результат:

INSERT INTO config( site_name ) VALUES ($_POST[site-name]);

А так, вышло:

$my_query ='INSERT INTO config ( site_name) VALUES (\''.$site_name.'\');';

Спасибо огромное. Обучение по справочникам иногда заводит в тупик ))
СПАСИБО
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352316
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что вы паритесь, даром что ли набиваете эти баксики бесконечно. Воспользуйтесь наконец тем, для чего они предусмотрены были:

$my_query ="INSERT INTO config (`site_name`) VALUES ($site_name)";

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

Однако потребуются двойные кавычки. В одинарных все чисто - буквальная строка. Для скуль-запросов самое то если переменных меньше чем букаф.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352319
Synov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
deblogger,

Ооо не знал, спасибо, меньше путаницы будет)
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352395
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synov,

Ага, но если вы делаете приложение которое должно отвечать стандартам, то вся эта моя прелесть падает в жерло вулкана в самом сердце Мордора.

Это просто, да:

$my_query ="INSERT INTO config (`site_name`) VALUES ($site_name)";

однако правильный квалификатор это db.table, table.field где любой идентификатор может иметь специальные символы или быть назван специальным словом. Стало быть православная запись такова

INSERT INTO `db`.`config` (`config`.`site_name`) ...

c VALUES ($site_name) еще затык - если это строка, надо кавычить, если число - не надо. Значение $site_name должно быть в кавычках, например $site_name = ' "sql.ru" ';

Хорошо если вы берете данные с шаблона, а если без шаблона то: тип поля меньше 10 это число, все что больше 10 - строка.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352414
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, прелесть остается, это у меня переклинило с непривычки. Знал же, но все равно наплодил мелких конкатенаторов вместо, например такого синтаксиса:

Код: php
1.
2.
3.
4.
5.
$q = "INSERT INTO `$db`.`$table`";
$q .= " (`$table`.`$name`, `$table`.`$value`, `$table`.`$def`, `$table`.`$opt`)";
$q .= " VALUES (\"$key\",";
$q .= " \"" . implode($values, '","') . "\")";
...



Это функция типа saveSetting() - всякие мелкие фишки сохранять в БД.

Однако халява все равно не такая сладкая. Во-первых сами двойные приходится косячить, что делает код палочным (у меня от регов в частностинемедленно косогласие развивается), во-вторых следить чтобы внутрь двойных не попали лишние сущности.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352425
mhx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mhx
Гость
автор
Код: php
1.
$my_query ="INSERT INTO config (`site_name`) VALUES ($site_name)";


Говнокод, ибо очевидно, что это строка, и сей запрос не выполнится.
c VALUES ($site_name) еще затык - если это строка, надо кавычить, если число - не надо.
Мало вы статей читали про SQL injection. Видимо, совсем не в курсе про запросы типа id=-9999+OR+1=1/* и т.д.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352593
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mhxМало вы статей читали про SQL injection. Видимо, совсем не в курсе про запросы типа id=-9999+OR+1=1/* и т.д.

Типа не понял что это даст. Типа вам хочется увидеть ответ 404 или как-то еще себе навредить?
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352726
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

не небрежном отношении к данным это позволяет получить тот набор данных, который вы никоим образом НЕ предполагали к выдаче. Ранее так находил разные, типа, заприваченные статьи на сайтах, в т.ч. и ДСП... щас просто не интересно стало.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38352730
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

правильный вариант: INSERT INTO config (`site_name`) VALUES (?) с прибинтованным значением параметра.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353214
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Общие слова я и сам знаю. Меня интересовала техника конкретного варианта. Зачем мне кавычить число, если зная что это число я могу сделать его числом. $n = intval($s); Вы хакнули запрос - получите 0, или что там будет после интвала с вашим примером.

Допустим вы дописали в user_id = 3 (or '1' = '1');

intval(3 (or '1' = '1');) сколько будет?
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353226
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второе, многоходовые комбинации в популярном API недопустимы. Как вы доберетесь до конца выражения?

Я не знаю, не проверяю - мне просто интересно как вы уберете клиентом ; которую я ставлю в скрипте на сервере.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353642
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

mhxdeblogger
$my_query ="INSERT INTO config (`site_name`) VALUES ($site_name)";

Говнокод, ибо очевидно, что это строка, и сей запрос не выполнится.


+1

@deblogger:

Товарищ, не пишите бред, если не понимаете.
Тут совсем не обязательно отвачать по 10 раз самому себе в КАЖДОЙ теме.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353764
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

Вы плохо понимаете о чём пишете. Я привел пример работы через бинтование параметров, а не их "кавыченье"... никакое слешование не исключает никаких инъекций. В случае целочисленных значений, явное приведение к целому позволяет избежать строковых иньекций, это да. Но и только. К сожалению, в базу гораздо чаще пишутся тексты и по ним же производится поиск (найди похожее). И вот передача их драйверу БД - не через бинтованные параметры - это и есть гарантия иньекций. Ещё раз - никакое слешование НЕ исключает инъекций.

Бинтование параметров - это (на всякий случай, поскольку вы явно не в курсе) передача значений ОТДЕЛЬНО от самого текста запроса. Вы подаете парметризованный запрос ( ? - и есть место позиционного параметра ) и к нему, дополнительно всю ту фигню, которую хотите положить/фильтровать в/из БД.

Сервер принимая их по отдельности - гарантирует что смешения и искажения самого запроса не произойдет.

Требуется драйвер к БД типа PDO или какой другой (их щас многа), умеющий гонять сами запросы отдельно от параметров к ним.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353791
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

PDO это высер mysqli. Майскля первична и биндами обмотана как доктор прописал.

Вы мне на пальцах можете наконец показать _реальный_ пример инъекции, или будете продолжать пугать типа вот бука придет и укол нафталина тебе в задницу сделает.

Два с половиной раза пытался понять на кой черт в майскле все эти бинды так и не понял. Это если посылать в хедере запрос текстом, типа DELETE FROM и бла-бла-бла до WHERE id=12 тогда, наверно да, надо отделить кал от мух.

Однако с чего вы решили что я так и делаю? Это не подразумевалось и я так не делаю.

Скрипт получает кучу параметров как таковых. Все фильтруется на скуль-энтитьки сперва, ну там избегнуть все кавычки, затем все типируется, что надо кавычится, тексты фильтруются, а операторы собираются по контексту.

Сделайте уже наконец инъекцию.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353794
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще, по-моему так все делают и именно поэтому я так и не понял на кой черт то самое биндование. Может еще и это популярно объясните?
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38353812
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger,

пошукайте в гугле. Есть хорошая прога, которая протестит ваш сайт на предмет возможных инъекций и даже скажет чего изъять из него можна... находил когда-то. Если вы чего-то не видели - это не значит что его не существует. А сочинять за вас запросы с инъекциями для ваших поделок - увольте. У меня своих задач хватает.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38355970
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слив защитан. В который раз стыдно за нацию которая вместо документации читает катехизисы.

Кстати, в документации я вычитал что квази-множественные запросы в популярном API таки разрешены.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if (is_array($q)) $multi_query = implode('; ', $q);
	else $multi_query = $q . ';';
	
	if ($link->multi_query($multi_query)) {
		$i = 0;
		do {
			$i++;
		} while ($link->next_result());
	}
//... проверка ошибок



Все просто, да? В процессе строительства запроса выкидываете все точкозапятые из идентификаторов которые прежде пропускаете через хтмлтитьки и запихиваете в тики; все значения пропускаете через mysqli->real_escape_string() и типируете, можно тупо по флагам поля - MYSQLI_NUM_FLAG, но это слишком тупо, лучше все-таки преобразовывать: целые в целые, плавающие в них самих и даты к тому же.

В финале получив запрос вида SELECT * FROM `Моя_база`.`Страна` WHERE `Страна`.`Код_страны` = 8 вы будете избавлены от шприцов на долгие годы.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38355979
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
deblogger Все просто, да? В процессе строительства запроса выкидываете все точкозапятые из идентификаторов которые прежде пропускаете через хтмлтитьки и запихиваете в тики; все значения пропускаете через mysqli->real_escape_string() и типируете, можно тупо по флагам поля - MYSQLI_NUM_FLAG, но это слишком тупо, лучше все-таки преобразовывать: целые в целые, плавающие в них самих и даты к тому же.Мне одному кажется, что параметризация всё же проще как написании, так и прочтении?
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38355993
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вот, попался тут светоч по которому инжектор плачет:

http://www.sql.ru/forum/1038869/vyborka-po-massivam

Вы господа о таких случаях? Но если человек подставляет свою ягодицу под шприц несомненно найдутся желающие профтыкать.

Хорошо, давайте обсудим параметризацию. Все равно давно уже оффтопик. У меня на входе н-заголовков в каждом по полю, флагу, типу и значению и н-2х-массив представляющий н-количество строк выбранных пользователем. Целого нет ничего абсолютно, все мелкими кусками подается. В частности если в значении заголовка 0 - это поле в операторах типа insert update вообще не участвует. Даже не представляю как в эту атомарную мелкоту еще и параметры зафигачить. Собственно оно и так уже параметризовано, или не параметризовано?
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38356018
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один разок пытался найти метод возвращающий строку запроса из API mysqli и сейчас повторил безуспешно. Насколько я понял прямого пути нет, а кривой смысла не имеет.

Так вот я думаю эти параметрические бинды ничего кроме расставления бактиков и кавычек не делают. Если бы можно было посмотреть строку - а наверно в логах БД можно - то все стало бы ясно как пень.

Ежу на пне понятно что и без майскли это делается регами и каким-то функциями способными понимать паттерны.

Согласен с чуваком Codeguy который два года назад отпостил:

автор CodeguyThe actual purpose to use a prepared statement in sql is to cut the cost of processing queries; NOT to separate data from query.

http://www.php.net/manual/en/mysqli.prepare.php#103730

Кроме того кто запрещает наделать полезных VIEW'ов, например по связям, псевдонимам, выборке полей, конкатов и тп и затем кляузой WHERE выбирать именно то, что нужно?

Тогда замороченный запрос будет лежать в БД, а пользователю останется только ввести условие SELECT * FROM VeryComplicatedView WHERE id = 6;

Кроме того простые вьюхи могут быть редактируемыми.
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38356019
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
information_schema это голимые view
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38356025
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerкто запрещает наделать полезных VIEW'овalgorithm=temptable
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38356027
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не всегда, конечно, но частенько
...
Рейтинг: 0 / 0
Помогите, не могу найти ошибку INSERT INTO=((((
    #38356137
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как будто рекордсет не та же самая темпоральная табля.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите, не могу найти ошибку INSERT INTO=((((
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]