PHP必须mysql_real_escape_string()正确地转义任何可能引起问题的字符。为BASH模仿此功能的最佳方法是什么?
mysql_real_escape_string()
无论如何,有使用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可以为您进行转义:
printf
$ a=''\''"\;:#[]{}()|&^$@!?, .<>abc123' $ printf -v var "%q" "$a" $ echo "$var" \'\"\\\;:#\[\]\{\}\(\)\|\&\^\$@\!\?\,\ .\<\>abc123
我将由您决定是否足够激进。