尝试使用 NodeJS 创建与 MySQL 数据库的连接时 PHP Exec 挂起

Posted

技术标签:

【中文标题】尝试使用 NodeJS 创建与 MySQL 数据库的连接时 PHP Exec 挂起【英文标题】:PHP Exec hangs when trying to use NodeJS to create a connection to a MySQL database 【发布时间】:2021-05-04 23:26:02 【问题描述】:

我正在尝试运行以下 NodeJS 脚本来创建与 mysql 数据库的连接并执行一些任务:

var mysql = require('mysql');

var con = mysql.createConnection(
    host: "url",
    user: "xxx",
    password: "yyy",
    database: "zzz"
);

con.connect(function(err) 
    if (err) console.log(err);
    else console.log("Success");
);

当这个脚本从 Ubuntu 终端运行时,它按预期工作,但是当我尝试使用 php 中的 exec 函数以下列方式执行相同操作时:

$execString = "/usr/bin/node /home/user/sampleProject/example.js";          
exec($execString, $output);

程序挂起,没有返回预期的“成功”消息。

我启用并检查了 MySQL 日志并验证了在使用 exec 函数调用脚本时数据库确实收到了连接请求,但由于某种原因它永远不会完成并继续执行直到超时。

任何关于为什么会发生这种情况的想法或帮助将不胜感激。

【问题讨论】:

你为什么还要这样做?如果您需要,PHP 可以直接连接到您的数据库 您是在尝试直接对这些对象进行字符串操作,还是将 JSON 解码为对象/数组,然后以这种方式进行操作?后者通常是更有效的方法。节点在这方面明显更快吗?这些和mysql有什么关系?数据是否保存在数据库中?无论如何,我怀疑如果上面的代码本身导致错误,那么连接代码是异步的并导致回调的事实可能是 exec 方法的问题。 好吧,你肯定需要通过 PHP 来触发它吗?有什么理由不能直接调用节点脚本?它是如何被触发的——它是更大的 PHP 脚本的一部分,还是只是从浏览器调用的一个小脚本,还是什么? 节点可以像 PHP 一样直接充当 API 端点 你是一个聪明人,你是对的,我可以使用相同的脚本代码作为 Node 中的 API 端点,并从另一个 API 调用一个 API,谢谢,遗憾的是我只能投票你的cmets,而不是给你更多的声望点 【参考方案1】:

我怀疑,如果上面的代码本身导致错误,那么连接代码是异步的并导致回调的事实可能是 exec 方法的问题。

但是...你肯定需要通过 PHP 来触发它吗? NodeJS 可以像 PHP 一样直接充当 API 端点。您可以直接公开它,而不是通过 PHP。或者至少将其公开为端点,然后通过 HTTP 从 PHP 调用它。

【讨论】:

以上是关于尝试使用 NodeJS 创建与 MySQL 数据库的连接时 PHP Exec 挂起的主要内容,如果未能解决你的问题,请参考以下文章

如何将 nodeJS 集群与 mySQL 池集群一起使用?

Nodejs学习笔记--- 与MySQL交互(felixge/node-mysql)

具有express-sessions和express-mysql-session的NodeJS没有设置会话。我搞砸了哪里?

nodejs从0到1(mysql)

nodejs连接mysql——createPool&createConnection区别

NodeJS + Mysql 与 Docker Compose 2