【问题标题】:I get no results from ssh2_exec() with a mysql command我使用 mysql 命令从 ssh2_exec() 没有得到任何结果
【发布时间】:2013-05-17 04:56:34
【问题描述】:

我遇到了问题。 如果我运行 mysql 命令,我的 PHP 脚本会中止:

ssh2_exec($session, 'mysql -sse "SELECT COUNT(*) FROM table"');

用putty是命令没问题的。任何其他命令,如 'll -la' 或其他任何命令都没有问题。

你能告诉我为什么它不起作用吗?

再见莫

【问题讨论】:

  • 首先必须连接mysql服务器,然后才能运行sql命令。
  • 并且不要使用 ssh2_exec(),而是使用 PHP 数据对象 (PDO) 之类的数据库扩展。通过使用 bindParam(将参数绑定到指定的变量名),它将有助于使您的查询更加安全。 “PHP 数据对象 (PDO) 扩展定义了一个轻量级、一致的接口,用于在 PHP 中访问数据库。” - php.net/manual/en/book.pdo.php
  • 不确定,我正在寻找一种以 root 身份进行后台查询而不允许 root 进行远程连接的方法,ssh2 是一个很好的解决方案。
  • PDO 对我来说是不可能的,因为 mysql 服务器是 ver。 4.1+。

标签: php mysql linux ssh libssh2


【解决方案1】:

我不知道-sse 选项,但我猜你的问题是ssh2_exec 返回一个流而不是一个字符串。

您可以尝试使用:

$stream = ssh2_exec($session, 'echo "SELECT COUNT(*) FROM table" | mysql');
$output = stream_get_contents($stream);

【讨论】:

  • 第一个 -sse 是... -s = 静默输出(无边框),-ss =(无边框和标题),-e = 执行...一起 -sse :) 我知道ssh2_exec() 返回一个流,我认为没有必要发布它:)
【解决方案2】:

好的……我明白了。

命令“mysql”在我的系统中是“mysql -u user -ppassword”的别名。 但是如果你使用 ssh2_exec() 进行连接,所有别名都是未知的。

我要做的就是这个。

ssh2_exec($session, 'mysql -u user -ppassword -sse "SELECT COUNT(*) FROM table"');

谢谢你!

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2013-03-27
    • 2016-09-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多