Я пытаюсь прочитать текстовый файл, содержащий очень длинный список слов и вставку их и их длину в базу данных для дальнейшего анализа.bash, escaping apostrophe в выражении SQL в bash
Сценарий у меня есть работы, пока он не достигнет слова с апострофом. То, что я в настоящее время:
#!/bin/bash
inputfile="words.txt"
cat $inputfile | while read word; do
echo "INSERT INTO words (word, word_size) VALUES ('$word', CHAR_LENGTH('$word'));"
done | mysql -u root -p crossword
ошибка получили в жизни:
ERROR 1064 (42000) at line 170: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's', CHAR_LENGTH('abbey's'))' at line 1
Вы переключаетесь на язык, который обеспечивает правильную библиотеку для передачи параметров в SQL заявления, а не пытаться построить заявление, используя строку операции. – chepner
Да, я мог бы использовать PHP, но для такой маленькой вещи, которую нужно использовать один раз, но в очень большом списке слов (слова 800k), не будет быстрее? –
Прежде всего, отправьте свои инструкции SQL на стандартный вывод, удалив команду pipe и mysql. Затем выполните каждую инструкцию SQL вручную в командной строке (правильно процитировав ее), чтобы определить, какой из инструкций выйдет из строя (все они или только некоторые), а затем вручную отлаживать этот оператор. Когда вы знаете, что не так с выражением SQL, которое вы генерируете, вы можете спросить, как вставить скрипт, если вы не можете понять это. – Fred