mysql存储过程

dphi5xsq  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(460)

我在mysql中有一个存储过程getusers,它接受一个int并返回一个包含用户数据的用户表。当我在phpmyadmin中使用“name”字段运行存储过程时,它返回1行,但是当我从node.js调用它时,行字段返回“undefined”。我觉得我肯定遗漏了一些东西,因为我对node.js执行的所有其他表操作都是以同样的方式工作的,但是当我尝试调用这个存储过程时却没有。这是我的密码:

var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var bcrypt = require('bcrypt');
//constants
const tableName = 'user';

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'users',
    charset : 'utf8mb4'
});

//function to insert to or retrieve data from the database
router.post('/', function(req, res, next) {
        let userID = req.body.userID;
        connection.query(
            "CALL `getUsers`(?)",
                [userID],
                function(err, row, field) {
                if (err) {
                    res.send({ 'success': false, 'message': 'Could not connect. ' + err});
                }
                if ( row.length > 0 ) {
                    console.log('name: ' + row[0].name);
                    res.send({ 'success': true, 'users': row });
                } else {
                    res.send({ 'success': false, 'message': 'No users found.' });
                }
        }); 
    }
});

控制台日志返回'name:undefined',但当我在phpmyadmin中运行过程时,它返回包含正确'name'字段的行。

ymdaylpp

ymdaylpp1#

语法应为: connection.query(CALL getUsers(?), [userID], (err, row, field) => {}) 注意倒勾和双引号的使用方式。

zzzyeukh

zzzyeukh2#

我只是想让你们知道,我通过将行[0].name改为行[0][0]解决了这个问题。name发现存储过程与常规查询不同,它们返回的是一个数组数组,而不是一个数组。

相关问题