명령에 문제가 있거나 오류가 표시되지 않습니다. 또한 비활성화된 사용자와 UID가 500을 초과하는 사용자를 제외해야 합니다. 이것은 내가 사용해야하는 SQL 명령입니다
INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `created`, `modified`, `active`) VALUES ('$username, '$pass', '', '$xxxx', 0, 'xxx', 'xxx', 'date --rfc-3339=date', 'date --rfc-3339=date', 1);"
답변1
문제는 SQL의 백틱이 쉘에 의해 명령 대체로 처리된다는 것입니다. 쉘은 백틱 문자열을 명령으로 실행하여 해당 비트를 특정 명령의 출력으로 바꾸려고 시도합니다.
echo
문자열에 큰따옴표가 있기 때문에 쉘이 이를 수행합니다 .
이 특정 문제를 해결하려면 각 백틱을 이스케이프 처리하세요 \`
.
이상적으로는 SQL을 작은따옴표로 묶은 문자열로 전달할 수 있지만 이는 변수가 확장되지 않음을 의미합니다.
다음과 같이 하면 더 안전합니다.
printf 'INSERT INTO `mailbox` (`username`, `password`, `name`, `maildir`, `quota`, `local_part`, `domain`, `created`, `modified`, `active`) VALUES ("%s", "%s", "", "%s", 0, "xxx", "xxx", "date --rfc-3339=date", "date --rfc-3339=date", 1);\n' "$username" "$pass" "$xxxx"
...사용 중인 특정 데이터베이스가 큰따옴표로 묶인 필드 데이터를 처리할 수 있다고 가정합니다.