4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
1

Не работает запрос на добавление с одинарной кавычкой

21.09.2013, 22:59. Показов 3039. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, такая ситуация, есть в базе MySQL две таблицы, одна из них таблица импорта. Добавляю данные из импорта примерно так:
PHP
1
2
3
4
5
6
$imp_query="SELECT imp_teble.name_kl FROM imp_table";
$imp=mysql_query($imp_dog_query);
while($result_row=mysql_fetch_array($imp)){
$add_query="INSERT INTO imp_table(name_kl) VALUES ('$result_row[name_kl]')";
$add=mysql_query($add_query);
}
Все работает за исключением когда в имени, или фамилии встречается одинарная кавычка. Например когда вносил человека с фамилией: Севост'янов. Получается что запрос выглядит так ....VALUES ('Севост'янов')... Когда я в запрос передавал одну переменную, применял addslashes(). А вот как в такой ситуации быть не пойму.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.09.2013, 22:59
Ответы с готовыми решениями:

Добавление в строку экранирующего символа '\' перед каждой кавычкой в строке
Помогите пожалуйста!) Нужно написать класс StringFormatter с методом string SafeString( string s...

Не работает запрос на добавление
Доброго времени суток. Проблема такая: не работает запрос на добавление. Создать запрос на...

Не работает запрос на добавление
При нажатии на кнопку из формы регистрации авто, данные должны записываться в таблицу страхования....

Запрос на добавление не работает
Добрый день! Имеется Таблица -Tab1 Структура: Tab1.Chet, Tab1.Prihod, Tab1.Rashod В поле...

15
26 / 26 / 9
Регистрация: 02.01.2011
Сообщений: 135
Записей в блоге: 1
21.09.2013, 23:18 2
Попробуйте

PHP
1
2
3
4
5
6
7
$imp_query="SELECT imp_teble.name_kl FROM imp_table";
$imp=mysql_query($imp_dog_query);
while($result_row=mysql_fetch_array($imp)){
$add_query="INSERT INTO imp_table(name_kl) VALUES ('$result_row[name_kl]')";
$add_query= addcslashes($add_query);
$add=mysql_query($add_query);
}
0
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
22.09.2013, 00:32  [ТС] 3
Цитата Сообщение от Hagacure Посмотреть сообщение
Попробуйте

PHP
1
2
3
4
5
6
7
$imp_query="SELECT imp_teble.name_kl FROM imp_table";
$imp=mysql_query($imp_dog_query);
while($result_row=mysql_fetch_array($imp)){
$add_query="INSERT INTO imp_table(name_kl) VALUES ('$result_row[name_kl]')";
$add_query= addcslashes($add_query);
$add=mysql_query($add_query);
}
Неа, не сработало...
Warning: addcslashes() expects exactly 2 parameters, 1 given in Z:\home\localhost\www\alfagroup\people_add.php on line 53

Ошибка добавления строки - 1065: Query was empty
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.09.2013, 13:25 4
addslashes тогда уж, а лучше mysql_real_escape_string. И не к запросу, а к переменным.
1
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
22.09.2013, 19:17  [ТС] 5
Цитата Сообщение от KOPOJI Посмотреть сообщение
addslashes тогда уж, а лучше mysql_real_escape_string. И не к запросу, а к переменным.
Но вот и дело в том что у меня не получается применить addslashes именно к каким то переменным запроса. Единственное что у меня получилось добиться результата так за место одинарной кавычки наисать вот так:
$add_query="INSERT INTO imp_table(name_kl) VALUES (\"$result_row[name_kl]\")";
Работает, но не уверен что это правильное решение... с точки зрения грамотного кода.
0
Заблокирован
22.09.2013, 19:28 6
Цитата

PHP
1
2
3
4
5
$imp_query="SELECT imp_teble.name_kl FROM imp_table";
$imp=mysql_query($imp_dog_query);
while($result_row=mysql_fetch_array($imp)){
$add_query="INSERT INTO imp_table(name_kl) VALUES ('$result_row[name_kl]')";
$add=mysql_query($add_query);
Конец цитаты.

Если мануал не врет, это все делается так:

SQL
1
INSERT INTO imp_table (name_kl) SELECT imp_teble.name_kl FROM imp_table;
http://dev.mysql.com/doc/refma... elect.html

Добавлено через 4 минуты
Однако довольно странная задача. Взять name_kl из imp_table и добавить в imp_table значения поля name_kl.

Так и должно быть, или что-то пропустил?
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.09.2013, 20:20 7
Цитата Сообщение от vavilom Посмотреть сообщение
Работает, но не уверен что это правильное решение
работает до тех пор, пока не встретится теперь уже двойная кавычка. Можно, например, так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const MAX_VALUES = 30;
 
$imp_query="SELECT imp_teble.name_kl FROM imp_table";
$imp=mysql_query($imp_dog_query);
$add_query = 'INSERT INTO `imp_table`(`name_kl`) VALUES ';
 
$i = $j = 0;
 
while($result_row=mysql_fetch_assoc($imp)){
    $i++ > 0 && $i % MAX_VALUES === 1 && $j++;
    isset($insert[$j]) || ($insert[$j] = NULL);
    $insert[$j] .= '("' . mysql_real_escape_string($result_row['name_kl']) . '"), ';
}
for($i = 0, $cnt = count($insert); $i < $cnt; $i++)
    mysql_query( $add_query . rtrim($insert[$i], ', ') );
1
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
22.09.2013, 20:28  [ТС] 8
Цитата Сообщение от sqlnub Посмотреть сообщение
Цитата
Однако довольно странная задача. Взять name_kl из imp_table и добавить в imp_table значения поля name_kl.

Так и должно быть, или что-то пропустил?
Спасибо за помощь, получилось! И правда очень странная задача)) На самом деле я ошибся, там вставка в другую таблицу идет. Но факт остается фактом, вдруг в будущем подобная проблема будет, хочется знать как правильно писать чтоб небыло таких ошибок.

Добавлено через 6 минут
Цитата Сообщение от KOPOJI Посмотреть сообщение
работает до тех пор, пока не встретится теперь уже двойная кавычка. Можно, например, так
Да об этом я как то и не подумал Спасибо за ваш пример, сегодня уже некогда с ним разбираться, но идею я понял, завтра попробую реализовать!
0
Заблокирован
23.09.2013, 10:00 9
Копирование данных между таблицами делается сугубо запросами, без всяких процедур. В это можно даже верить не зная, потому что СУБД не может не иметь такого рода методов. Иначе это не СУБД, применительно и к такой как mySQL.

Типовой запрос на копирование это INSERT INTO ... SELECT...
0
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
23.09.2013, 11:46  [ТС] 10
Цитата Сообщение от sqlnub Посмотреть сообщение
Копирование данных между таблицами делается сугубо запросами, без всяких процедур. В это можно даже верить не зная, потому что СУБД не может не иметь такого рода методов. Иначе это не СУБД, применительно и к такой как mySQL.

Типовой запрос на копирование это INSERT INTO ... SELECT...
Это я уже понял, спасибо. Но все равно сама проблема подобная думаю может в жизни еще встретиться... Вот и на будущее буду знать как с ней бороться.
0
Заблокирован
24.09.2013, 05:56 11
При копировании запросом вам не надо думать о санации данных, в этом весь сахар.
0
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
24.09.2013, 19:07  [ТС] 12
Цитата Сообщение от sqlnub Посмотреть сообщение
При копировании запросом вам не надо думать о санации данных, в этом весь сахар.
Да спасибо, в этом я разобрался, но сложность теперь возникла в том что средствами php я по мимо выборки добавлял вычисляемые переменные в нужную таблицу например так:
PHP
1
2
3
4
5
6
7
8
9
10
...
while($result_row=mysql_fetch_array($imp_table)){
    if($result_row[sh]==1)$pp=0.065*$result_row[sum];
        else if($result_row[sh]==2)$pp=0.05*$result_row[sum];
            else die("Неправильная схема активе № ".$result_row['tnum']);
$add_query="INSERT INTO table( tnum, pp...) VALUES (inmtnum, $pp...);
//и после удачного добавления была надпись что номер такой то успешно внесен, потом удалялась из таблицы импорта та строка которая добавилась...
$drop_imp="DELETE FROM `imp_table` WHERE `tnum`=$result_row[tnum]";
...
}
А вот средствами mysql как это в запросе так сделать?
0
Заблокирован
24.09.2013, 19:14 13
Копирование данных между таблицами применяется для реализации квази-ручных методов репликации, при перестройке структуры, восстановлении целостности и в таком роде. В рабочем порядке копировать не имеет смысла, потому что весь смысл в отношениях.
0
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
24.09.2013, 20:09  [ТС] 14
Цитата Сообщение от sqlnub Посмотреть сообщение
Копирование данных между таблицами применяется для реализации квази-ручных методов репликации, при перестройке структуры, восстановлении целостности и в таком роде. В рабочем порядке копировать не имеет смысла, потому что весь смысл в отношениях.
Вообще это сложно объяснить, но сейчас попробую, может быть кто то посоветует удобней методы работы.
Ситуация в том что база MySQL на данный момент не работает, а всего лишь я пытаюсь перейти с MS SQL на MySQL.
А таблица импорта делается для того что сотрудники вносят данные в нее, потом эти данные в конце дня проверяются в головном офисе, чтоб в основную таблицу не попало не чего лишнего или неправильного, и после проверки сотрудником подтверждается копирование в основную таблицу. Это первая причина.
Вторая: с точки зрения безопасности, что только сотрудники головного офиса имеют право на добавление в основную таблицу.
Третья над которой я сейчас думаю... Это вставка из Exel. Не все сотрудники имеют доступ к базе, командировки например. Они по почте отправляют отчет в Exel. Для работы с MS SQL доступ организован через access, и там просто открываем связанную таблицу импорта, из Exel Ctrl+C в таблицу импорта Ctrl+V, и потом нажатием одной кнопки эти отчеты вносятся в основную таблицу. Удобно и быстро. Но говорю же это не идеал, это то что я смог придумать. Понимаю сейчас что через PHP наверно не получится вставлять Ctrl+C/Ctrl+V. Надо будет искать другой метод работы с отчетами Exel.

А вообще ситуация решилась с ошибкой, покопался с кодом KOPOJI, и ко всем полям куда пользователи могут вставить кавычки, пришлось прописать mysql_real_escape_string.

P.S. Конечено если кто то считает что мы работаем не правильно, буду благодарен за любой совет в сторону улучшения организации рабочего процесса.
0
Заблокирован
24.09.2013, 21:31 15
Цитата Сообщение от vavilom Посмотреть сообщение
А таблица импорта делается для того что сотрудники вносят данные в нее, потом эти данные в конце дня проверяются в головном офисе, чтоб в основную таблицу не попало не чего лишнего или неправильного, и после проверки сотрудником подтверждается копирование в основную таблицу. Это первая причина.
Понятно. Догадаться добавить поле на два состояния до и после цензуры вы не захотели. Вы видели форумы с премодерацией? Ну, когда написал, а появится после цензуры или вообще не появится. Вы подумали "они там копируют". Ничего не копируется и может даже не удаляться. Просто есть поле значение которого показывает можно это показывать всем, или нельзя всем, а только тем, кому можно. Эту систему можно расширить. Добавить значений, добавить ролей, разрешений и все такое. Допустим культурному начальству можно постить без цензуры, а для тупых рабов она обязательна, иначе накосячат.

Однако процедура умножения на коэффициент в эту схему не укладывается.

Вторая: с точки зрения безопасности, что только сотрудники головного офиса имеют право на добавление в основную таблицу.
То же самое. Планктон вносит, а начальство косит. Чтобы косяки не сверкали пока начальство доберется - то самое поле попросту не дает данным быть отображенными и учтенными где-бы-то-ни-было.

Из екзеля делают csv и тупо закачивают его для импорта.

Добавлено через 7 минут
И конечно сам принцип. Я знаю что принято нанимать полных идиотов не способных даже на бит самостоятельной мысли, рабов, короче, интеллектуальных. Но посмотрите что получается. А получается в точности такая же картина отношений, как и в случае рабов материальных. Когда рабовладелец оказывается порабощен своими рабами. Ради кого вся эта хитрая репликация и фильтрация разрабатывается и оплачивается? Правильно - ради них. Понятно? Были бы они чуть умнее - и не пришлось бы тратить время и деньги, наоборот, пришлось бы их зарабатывать. Впрочем сейчас вы на них зарабатываете.

Добавлено через 6 минут
Культура работы с БД требует определенного интеллектуального развития. Как и демократия, кстати. Теперь понятно почему у нас рулит екзель и социализм?
1
4 / 4 / 2
Регистрация: 19.10.2011
Сообщений: 187
24.09.2013, 21:47  [ТС] 16
Спасибо конечно за советы, некоторые моменты учту... Я думаю что все равно сколько людей столько и мнений, и не вижу плохой идеей не допускать к важной таблице всех подряд. Но все таки как вариант поля модерации учту... Но вот по поводу этой фразы:
Цитата Сообщение от sqlnub Посмотреть сообщение
Культура работы с БД требует определенного интеллектуального развития. Как и демократия, кстати. Теперь понятно почему у нас рулит екзель и социализм?
Хочется спросить:
Вы сразу родились с IQ выше чем у Наполеона? Форумы пестрят такими умными фразами. Культура работы с БД требует еще и опыта не так ли? А люди просят помощи на форумах для того чтоб, те у кого опыта много, с ними поделились. А не показывали на сколько другим не хватает интеллектуального развития!
0
24.09.2013, 21:47
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2013, 21:47
Помогаю со студенческими работами здесь

Не работает запрос на добавление
Всем доброго времени суток! Выбираю данные из 2-х таблиц и помещаю их в третью таким запросом: ...

не работает запрос на добавление INSERT INTO...
не получается сделать запрос: INSERT INTO продажа ( , , ) VALUES ((SELECT техника. FROM техника...

Не работает запрос на добавление из коллекции в бд
Запрос declare b_id number; l_count number; begin l_count :=...

Почему запрос на добавление работает не одинаково в двух указанных случаях
Сразу прошу извинить, так как знания мои не так обширны, как хотелось бы. На мой неопытный взгляд,...

Слово с кавычкой
Суть проста, есть фраза &quot;I'll deliver your liqour&quot;, пишу скрипт для бота и программе надо нажать...

Многострочный массив с кавычкой
Дан массив вида: Как поставить эту кавычку? '/' - не помогает! string mas = @&quot;1 2 &quot;3 4 5&quot;;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru