Экспорт данных в формате .sql.Как убежать? - PullRequest
6 голосов
/ 18 апреля 2011

Я пишу инструмент экспорта, который преобразует входные данные json в операторы sql.

Этот инструмент (и не должен) знать о соединениях с базой данных, он должен просто вывести .sql, который можно использоватьс другими инструментами выполняется фактический импорт.

Большинство функций mysqli -> * и PDO полагаются на открытое соединение (для определения таких вещей, как набор символов).Какой хороший способ пойти по этому поводу?

Ответы [ 4 ]

2 голосов
/ 18 апреля 2011

Причина, по которой функциям MySQL требуется соединение для экранирования строки, заключается в том, что все, что mysql_real_escape_string() делает, это вызывает встроенную функцию экранирования MySQL.

Однакоесли вы прочитаете страницу руководства для нее , вы увидите, что они действительно перечисляют экранированные символы:

mysql_real_escape_string () вызывает библиотечную функцию MySQL mysql_real_escape_string, которая предваряет обратную косую чертуна следующие символы: \ x00, \ n, \ r, \, ', "и \ x1a.

Вы не хотите использовать addslashes(), так как для этого требуется только несколько символов,и не обеспечит безопасное решение. Но вы должны быть в состоянии повторно реализовать экранирование, выполненное с помощью mysql_real_escape_string(), используя приведенный список символов, с простым вызовом strtr() или подобным:

$replacements = array("\x00"=>'\x00',
                      "\n"=>'\n',
                      "\r"=>'\r',
                      "\\"=>'\\\\',
                      "'"=>"\'",
                      '"'=>'\"',
                      "\x1a"=>'\x1a');
$escaped = strtr($unescaped,$replacements);
0 голосов
/ 18 апреля 2011

@ stefgosselin: mysql_real_escape_string действительно требует подключения.

Я бы пошел по линии с наименьшим сопротивлением. Средства используют системный вызов для выполнения mysqldumper> tmpfile

0 голосов
/ 18 апреля 2011

только мысль, возможно ли для вашего приложения сгенерировать и sql как

INSERT INTO table1 (id, name) VALUES (?, ?);

и передать набор параметров для sql в виде массива

$parms = array('value1', 'value2');

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

function writeToDb($sql, $parms) {
// do escaping here
}
0 голосов
/ 18 апреля 2011

Для экранирования функция mysql_real_escape_string является обычным выбором для этой задачи, за исключением необходимости подключения.Другой альтернативой будет addslashes.

Я хотел бы проверить файл mysqldump с учетом необходимых параметров (наборы символов, таблицы удаления и т. Д.) И взять его оттуда в качестве отправной точки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...