【问题标题】:executing "php -r" mysql_connect() not returning link resource执行“php -r”mysql_connect() 不返回链接资源
【发布时间】:2017-07-18 16:19:18
【问题描述】:

我一直在我的 shell 脚本中嵌入一些 php。像这样的东西有效:

SUBJECT_URL=php -r "echo rawurlencode('$SUBJECT');"

并将我的字符串变量 SUBJECT_URL 设置为 $SUBJECT 的转换值

然而,

我正在尝试使用这个命令:

link=php -r "mysql_connect('localhost', 'root', 'mypassword');"

测试我与 SQL 数据库的连接。不幸的是,“链接”的值没有设置。因此我无法测试它是否成功,也无法发出:

php -r "mysql_close($link);"

释放资源。

任何帮助将不胜感激。

【问题讨论】:

  • 这是错误的做法。
  • @jim 你使用 mysql_connect 是因为你使用的是旧版本的 php 吗?
  • 什么版本的php? 5.5 版以后不能使用 mysql_connect
  • mysql_connect 函数(已弃用)返回的对象可能在您尝试使用它时不受支持
  • 运行 PHP 5.3.3。正确的做法是什么?

标签: php hyperlink identifier mysql-connect


【解决方案1】:

这是因为 mysql 连接与 php 断开。 现在,如果你真的不能在不使用 php 的情况下连接到 mysql,你可以使用类似的东西:

php -r "echo @mysql_connect('localhost', 'root', 'mypassword')? 'connected' : 'not connected';"

你不需要释放连接,因为 php 会在它退出时为你做。

【讨论】:

  • 谢谢,我明白为什么我需要在我的顶级示例中使用“echo”命令,但不明白它在 (fab2s) 的示例中为什么或如何工作。抱歉,我的 shell 编程生锈了,但是 ? “已连接”:“未连接”部分在做什么?看起来像条件​​输出?
  • 这就是你能做的所有事情,看看是否可以建立连接,但不要操纵它,因为它在 php 之后就死了,在 ';' 之后就死了。如果需要 php 连接,为什么不直接用 php 编写脚本?
【解决方案2】:

使用php -r 几乎肯定是错误的方法;如果你需要使用 PHP,你最好用 PHP 编写整个脚本,而不是混合使用 Shell。

link=php -r "mysql_connect('localhost', 'root', 'mypassword');" 不起作用的原因是(a)mysql_connect 将资源返回到数据库连接,这不是可以强制转换为字符串的东西,以及(b)您的单行 PHP 脚本(mysql_connect('localhost', 'root', 'mypassword'); 无论如何都不会echo 该资源,即它甚至不会尝试将资源强制转换为字符串。

mysql_connect 函数在失败时返回false,因此如果您希望您的link 变量指示成功或失败,您可以相应地为其分配一个字符串。在单行中,ternary operator 是一种简单的方法,如fab2s noted in his answer (echo @mysql_connect('localhost', 'root', 'mypassword')? 'connected' : 'not connected')。在该代码中,@(静默运算符)防止失败的连接从 PHP 发出警告,如果调用返回“真实”的内容,则使用三元运算符有条件地返回 "connected",如果返回 @ 则返回 "not connected" 987654335@.

顺便说一句,请注意您真的不应该再使用旧的 MySQL 扩展。事实上,通常最好使用 PDO:

<?php
$dbConn = new \PDO(
    'mysql:dbname=my_db;host=localhost;charset=utf8',
    'user',
    'password',
    [PDO::ATTR_ERRMODE => PDO::ERR_EXCEPTION]
);

【讨论】:

  • 在 PHP 5.3 上,您不能使用短数组语法,因此 PDO 构造函数的最后一个参数将是 array (PDO::ATTR_ERRMODE =&gt; PDO::ERR_EXCEPTION)。但是,我强烈建议您升级到更新版本的 PHP; 5.3 速度慢且不安全。
猜你喜欢
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 2022-01-04
  • 2019-06-27
相关资源
最近更新 更多