【问题标题】:unquoted string in shell_execshell_exec 中不带引号的字符串
【发布时间】:2021-11-20 06:42:40
【问题描述】:

我尝试使用 like 运算符对 shell 命令运行查询,但每次它都会给出未引用字符串的错误

 $abc = shell_exec("mysql  --user=**** --password=**** --host=**** db -e
 
'SELECT TABLE_NAME,
       COLUMN_NAME 
 FROM information_schema.COLUMNS
 WHERE   COLUMN_NAME LIKE '\"'%lead%'\" 
 AND TABLE_NAME  LIKE '\"'%leads%'\"  "); '

它在单个条件下单独运行 喜欢

WHERE   COLUMN_NAME LIKE '\"'%lead%'\"

WHERE TABLE_NAME  LIKE '\"'%leads%'\" 

但与 AND 运算符结合使用它会给出不带引号的字符串 err 。我尝试删除和添加引号,但不工作 请建议

【问题讨论】:

  • 您尝试过什么来解决问题?你被困在哪里了?为什么不使用 PHP 的 MySQL 连接器?
  • 为什么不在 PHP 中使用 mysqli_* 函数呢?如果使用shell_exec(),则无法处理错误

标签: php mysql shell


【解决方案1】:

如果你想让引号成为字符串的一部分,你需要用反斜杠\"转义它

【讨论】:

    【解决方案2】:

    只需用反斜杠转义引号即可。

    $abc = shell_exec("mysql --user=**** --password=**** --host=**** db -e 'SELECT TABLE_NAME,COLUMN_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME LIKE '\"'%lead%'\" AND TABLE_NAME LIKE '\"'%leads%'\"'");
    

    【讨论】:

    • 错误:- [警告] 在命令行界面上使用密码可能不安全。
    【解决方案3】:

    使用这个

    shell_exec("mysql --user=**** --password=**** --host=**** db -e 'SELECT TABLE_NAME,COLUMN_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME LIKE '\"'%lead%'\" AND TABLE_NAME LIKE '\"'%leads%'\"'");
    

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习。这不是和你十二分钟前彼得皮瓦克给出的答案一样吗?
    • err- [警告] 在命令行界面上使用密码可能不安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2019-08-09
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多