PHP具有mysql_real_escape_string()
来正确转义任何可能引起问题的字符。为BASH模仿此功能的最佳方法是什么?
无论如何,有使用bash做准备好的mysql语句吗?这似乎是最好的方法。
我的大多数变量都不会(不应)具有特殊字符,但是我为用户提供了完全自由的密码保护。它可能包含'和'之类的字符。
我可能正在执行多个SQL语句,所以我想创建一个使用参数并随后运行该语句的脚本。这是我到目前为止所拥有的:
doSQL.sh:
#!/bin/sh
SQLUSER="root"
SQLPASS="passwor339c"
SQLHOST="localhost"
SQL="$1"
SQLDB="$2"
if [ -z "$SQL" ]; then echo "ERROR: SQL not defined"; exit 1; fi
if [ -z "$SQLDB" ]; then SQLDB="records"; fi
echo "$SQL" | mysql -u$SQLUSER -p$SQLPASS -h$SQLHOST $SQLDB
和使用上述命令的示例:
example.sh:
PASSWORD=$1
doSQL "INSERT INTO active_records (password) VALUES ('$PASSWORD')"
显然,如果密码中包含单引号,则此操作将失败。
最佳答案
在Bash中,printf
可以为您进行转义:
$ a=''\''"\;:#[]{}()|&^$@!?, .<>abc123'
$ printf -v var "%q" "$a"
$ echo "$var"
\'\"\\\;:#\[\]\{\}\(\)\|\&\^\$@\!\?\,\ .\<\>abc123
我将由您决定是否足够激进。