将参数传递给MySQL脚本命令行

dan*_*eln 23 mysql cmd

是否有任何选项可以将参数从命令行传递到MySQL脚本?

像这个例子中的@start_date:

mysql –uuser_id -ppassword –h mysql-host -A -e 
"set @start_date=${start_date}; source ${sql_script};" >${data_file};
Run Code Online (Sandbox Code Playgroud)

dan*_*eln 37

发现在网络上的答案在这里.

基本上,假设我们要运行此查询:

Select c_id, c_first_name,c_last_name, c_address,last_modified_date
from customer
where last_modified_date >=@start_date and last_modified_date <= @end_date;
Run Code Online (Sandbox Code Playgroud)

我们可以像这样传递'start_date'和'end_date':

/usr/bin/mysql –uuser_id -ppassword –h mysql-host -A \
    -e "set @start_date=${start_date}; set @end_date=${end_date};\
        source ${sql_script};" > ${data_file}
Run Code Online (Sandbox Code Playgroud)

  • 但是这种 SQL 参数用法不能防止 SQL 注入。因此,在 sql 查询中直接包含 shell var 没有任何优势。 (3认同)
  • 值得注意的是,是 shell 扩展了这个变量,所以这个答案意味着 *nix shell。 (2认同)
  • 正如其他两条评论所指出的,这不是一个参数化的语句,并且是这个问题的一个绝对糟糕的解决方案。 (2认同)