Nodejs 使用node.js连接mysql数据库,提示dyld: Symbol not found: _mysql_init
Nodejs 使用node.js连接mysql数据库,提示dyld: Symbol not found: _mysql_init
node:0.6.17
mysql:5.5.21
os:lion 10.7.3
var
//sys = require('sys'),
mysql = require('/Users/mackjoner/tech/nodejs/node_modules/mysql-libmysqlclient'),
conn,
result,
row,
rows;
var
host = “localhost”,
user = “test”,
password = “password”,
database = “db”,
test_table = “users”;
conn = mysql.createConnectionSync();
conn.connectSync(host, user, password, database);
//sys.puts(“Information:”);
//sys.puts(sys.inspect(conn.getInfoSync()) + “\n”);
if (!conn.connectedSync()) {
//sys.puts("Connection error " + conn.connectErrno + ": " + conn.connectError);
console.log("Connection error " + conn.connectErrno + ": " + conn.connectError);
process.exit(1);
}
conn.query("SELECT * FROM " + test_table + “;”, function (err, res) {
if (err) {
throw err;
}
res.fetchAll(function (err, rows) {
if (err) {
throw err;
}
//sys.puts("Rows in table '" + database + "." + test_table + "':");
//sys.puts(sys.inspect(rows));
console.log("Rows in table '" + database + "." + test_table + "':");
// This isn't necessary since v1.2.0
// See https://github.com/Sannis/node-mysql-libmysqlclient/issues#issue/60
//res.freeSync();
});
});
process.on(‘exit’, function () {
conn.closeSync();
});
提示信息
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
Referenced from: /Users/yangzhaojie/tech/nodejs/node_modules/mysql-libmysqlclient/build/Release/mysql_bindings.node
Expected in: flat namespace
dyld: Symbol not found: _mysql_init
Referenced from: /Users/yangzhaojie/tech/nodejs/node_modules/mysql-libmysqlclient/build/Release/mysql_bindings.node
Expected in: flat namespace
您遇到的错误 dyld: Symbol not found: _mysql_init
通常是由于安装的 MySQL 驱动与当前使用的 Node.js 版本或操作系统不兼容导致的。在您的情况下,使用的是较旧版本的 Node.js(0.6.17)和 MySQL(5.5.21),这可能会导致一些兼容性问题。
解决方案
为了修复这个问题,您可以尝试以下几个步骤:
- 升级 Node.js 和 npm:使用更现代的 Node.js 版本(如 14.x 或更高版本),因为这些版本对库的支持更好。
- 重新安装 MySQL 驱动:确保您安装了正确版本的 MySQL 驱动。
示例代码和步骤
步骤 1: 升级 Node.js 和 npm
您可以从 Node.js 官网下载最新版本的 Node.js 安装包并进行安装。
步骤 2: 安装正确的 MySQL 驱动
您可以使用 mysql2
或 sequelize
等更现代的驱动来替代 mysql-libmysqlclient
。
npm uninstall mysql-libmysqlclient
npm install mysql2
示例代码
以下是使用 mysql2
连接 MySQL 数据库的示例代码:
const mysql = require('mysql2/promise');
async function connectAndQuery() {
try {
const connection = await mysql.createConnection({
host: 'localhost',
user: 'test',
password: 'password',
database: 'db'
});
console.log('Connected to MySQL database!');
const [rows] = await connection.execute('SELECT * FROM users;');
console.log('Rows in table `users`:');
console.log(rows);
} catch (error) {
console.error('Error connecting to the database:', error);
}
}
connectAndQuery();
解释
mysql.createConnection
: 创建一个新的数据库连接。connection.execute
: 执行 SQL 查询并获取结果。[rows]
: 解构赋值以获取查询结果。console.log
: 输出查询结果到控制台。
通过这种方式,您可以避免使用过时的驱动程序,并且更容易获得支持和更新。希望这对您有所帮助!
markup
配置环境变量
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
搜了一下, 很多人都碰上这个问题啊, 共同点是: MacOS X 系统上安装MySQL
一下为原文: 大概意思是,你可能装了跟CPU的bit不一致的MySQL版本. 比如你的Mac是64-bit的,你却装了一个32-bit的MySQL… 希望能给你一点帮助… Hi,
Sorry to hear you’re having troubles, but from a quick google it seems like you’re not the only one: http://www.perlmonks.org/?node_id=793727 http://stackoverflow.com/questions/13342…ow-leopard
The general problem seems to be a 32-bit / 64-bit mismatch between MySQL and Perl…
Okay, as you’re installing the 10.6 package of MySQL i’m guessing you’re on Snow Leopard? Does your mac have a 64-bit processor in it (see here for details)?
Then, once you have established whether you should be running 32-bit or 64-bit code (match to your processor), completely remove MySQL from your system, install the appropriate one (I’m guessing you’ll probably need the 64-bit one), then reinstall DBD::MySQL.
Let me know how you get on.
是的,问题就是这个mysql32和64的区别,要和cpu对应。 设置环境变量是 Error: Unable to load shared library 解决这个错误
人类已经无法阻止cnodejs被XSS了!
这个是因为mysql需要的一些库没有在正确的位置, 一楼给的方案可以解决该问题, 最完美的方案是将需要的库安装到指定位置
这个问题通常是由于 MySQL C API 库没有正确安装或者路径配置不正确导致的。解决方法可以从以下几个方面入手:
-
安装MySQL C API库: 确保你的系统上安装了 MySQL C API 库。你可以通过 Homebrew 来安装:
brew install mysql
-
确保模块正确安装: 确认你已经正确安装了
mysql
模块。可以使用 npm 安装一个常见的 MySQL 驱动mysql
而不是mysql-libmysqlclient
:npm install mysql
-
检查环境变量: 确保你的环境变量中包含了 MySQL 的库路径。
-
修改代码: 修改你的代码以使用
mysql
模块,这是一个更现代、维护更好的驱动:const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'test', password: 'password', database: 'db' }); connection.connect((err) => { if (err) { console.error('Error connecting to MySQL:', err.stack); return; } console.log('Connected to MySQL as id ' + connection.threadId); }); connection.query('SELECT * FROM users;', (error, results, fields) => { if (error) throw error; console.log('Results:', results); }); connection.end();
总结来说,你应该避免使用 mysql-libmysqlclient
这个不再维护的模块,而选择 mysql
模块,并确保相关的依赖项已正确安装和配置。