2 u011218527 u011218527 于 2016.03.08 17:28 提问

node.js的mysql模块query方法里的字符串拼接问题

我写了一个和mysql交互的Node.js。大致功能是,在浏览器端提交用户信息表单后,会在现有的表userInfo里插入一条用户记录;然后针对这条用户记录自动再生成一个表,该表的名称是根据这条记录的id动态生成的。

该部分我写的代码如下:

                    //上面的代码已经实现把一条新的用户记录插入到userInfo里了。

                        var userId;
            var tableName;
            db.query(//这里通过query方法获取这条新记录的id(因为id是自动自增生成的)
                "SELECT user_id FROM userInfo "+
                "WHERE identity=?",
                [dataObj.identity],
                function (err,rows) {
                    if (err) {
                        throw err;
                    }
                    else{
                        userId=rows[0].user_id;//获取的userId假设为0
                        console.log(userId);
                        tableName='user_'+userId;//tableName变量装入要生成的新表的名称'user_0'
                        console.log(tableName);//(1)

                    }
                }
            );
                        //(2)
            db.query(
                'CREATE TABLE IF NOT EXISTS '+tableName+//创建新表的时候表名使用tableName变量的内容'user_0'
                '(arti_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, '+
                'title VARCHAR(50) NOT NULL, '+
                'maintext LONGTEXT, '+
                'time TIMESTAMP)',
                function (err) {
                    if (err) {
                        throw err;
                    }
                    else{
                        console.log("New user's article table has successfully created.")
                    }
                }  
            );

运行成功,但是查看数据库,这张新表并不叫 user _0, 而是叫undefine。

现检查结果如下:
通过上述(1)语句可以看到装入表名的变量tableName确实是user_0.
所有语句不变,把tableName直接赋值为‘user_0’的话(即在(2)处加入tableName='user_0'),得到的新表表名就是user_0了。

请问为什么会这样呢?我一定要通过动态获取id再给tableName赋值,怎样才能实现正确结果呢?

1个回答

Royal_lr
Royal_lr   Ds   Rxr 2016.03.09 11:35
已采纳

貌似是非阻塞的原因,,也就是异步,,他不会等待上面的查询执行完毕就会执行下面的

u011218527
u011218527 真的是这样!太感谢了。。。我改成后面的query嵌套在前面query的回调函数里面就可以了。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Node.js中的Query String模块
Query String模块简介这个模块提供一些处理 query string 的工具// 调用Query String模块 var querystring = require('querystring') 函数querystring.stringify(obj, [sep], [eq])序列化一个对象到一个 query string。可以选择是否覆盖默认的分割符(’&’)和分配符(’=’)quer
Android 中数据库查询方法 query() 中的 selectionArgs 的用法
http://blog.csdn.net/uoyevoli/article/details/4970860  Android 中涉及数据库查询的地方一般都会有一个 query() 方法,而这些 query 中有大都(全部?)会有一个参数 selectionArgs,比如下面这个 android.database.sqlite.SQLiteDatabase.query():   public C
nodejs 的监听方法
nodejs的监听方式 nodejs 的监听有两种方式: (1)次次监听 (2)自动监听 1.此次监听 在写好JS代码后 var http = require('http'); //创建一个变量引用nodejs提供的http服务 http.createServer(function (request,response) {//是用这个对象中createServerr方
node.js操作mysql 回调返回值
刚入门node.js的朋友可能不知道node.js操作mysql 是如何回调返回值得,我给你大家介绍介绍简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据库连接两种方法和区别 连接池Pooling connections 创建 其它连接池配置选项 释放 使用
Async.js解决Node.js操作MySQL的回调大坑
由于JavaScript语言异步特性,在使用Node.js执行很多操作时都会使用到回调函数,其中就包括访问数据库。如果代码中的业务逻辑稍微复杂一点,回调一层层嵌套,那么代码很容易进入Callback Hell,无论对写代码的人还是阅读代码的人,都是精神上的折磨。
nodejs与mysql数据库的交互操作
首先安装mysql库 mysql数据库版本:mysql-5.7.16-winx64,在官网下载zip包,修改一下配置,即可通过命令安装到电脑上。首先看一下连接的过程:var mysql = require('mysql'); //调用MySQL模块//创建一个connection var connection = mysql.createConnection({ host
最优雅,高效的javascript字符串拼接
最优雅,高效的javascript字符串拼接
使用node连接mySQL,封装自定义模块供外部调用
当我们使用node.js写网站的时候,难免会有一些操作让我们连接数据库,并对数据库经行操作,但是每次都需要对数据库进行连接与断开连接,所以,我写下这篇文章,将连接数据库的操作封装到一个模块中,然后简化外部调用的代码。废话不多说,直接看node.js怎么连接mysql: 1、使用npm安装MySQL模块: $ npm install mysql -S 2、在你需要对数据库进行操作的地方引入模块...
node.js 加载mysql模块问题
最近在学习node.js,学到node.js连接mysql数据库时出现了cannot find module 'mysql'问题,网上搜发现是自己没有安装mysql模块。 安装mysql模块步骤: 打开命令提示符 --> 输入 npm install mysql 即可安装mysql模块,这里有一个问题,就是安装路径与nodejs的安装路径不在一起,这个可以通过命令修改安装路径,我就不写了。
node.JS中将两个字符串进行相加
有时候服务器返回的数据是字符串类型,需要转化成int或是float型进行相加然后格式就是以下的: <div class="mt5">总数:<%= parseInt(entRet.lstContent.lstSptPlan[i].basejoinNum) + parseInt(entRet.lstContent.lstSptPlan[i].joinNum) %></div>