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

我将由您决定是否足够激进。

09-12 10:11