首页 \ 问答 \ 我在学习李文凯老师讲的thinkphp视频教程,在做自动验证这个示例时

我在学习李文凯老师讲的thinkphp视频教程,在做自动验证这个示例时

我在学习李文凯老师讲的thinkphp视频教程,现在学习到了三大自动这个视频了,在做自动验证这个示例时,发现只有开启APP—DEBUG时,才能成功,请问这是什么原因呢?关闭后,又不能了。怎么解决呢?
更新时间:2022-04-22 08:04

最满意答案

Node.js一直都与mysql , Nosql 配合使用,对于Sql  Server却没有很好的支持,一直都是小众技术人员自己编写访问程序。
2012年微软公司官方发行一款Node.js访问Sql Server的驱动程序——msnodesql ,让Node.js访问SQL Server更加简单。
安装
msnodesql 下载地址:下载  自行选择与自己系统相符的版本,点击安装。
msnodesql 官方地址:https://github.com/WindowsAzure/node-sqlserver 含wiki 和 疑问解答 。
在node.js环境下,安装方式和其他驱动安装一样,安装命令:nmp install msnodesql 
安装过程中需要注意的两个问题:
1、安装之前必须安装SQL Server Native Client 11.0 32位下载地址:下载 64位下载地址:下载 ,安装此程序不需要SQL server2012支持,经测试,SQL 2005和SQL 2008 可以正常安装使用。
2、安装过程中,如出现错误,检查是否在管理员界面下进行命令安装,这个问题我纠结了好长一段时间。

(右键——以管理员身份运行)

使用
引用驱动 
var sql = require('msnodesql');

建立数据库连接 
var conn_str = "Driver={SQL Server Native Client 11.0};Server={.};Database={nodetest};uid=sa;PWD=123456;";

不要被 SQL Server Native Client 11.0 吓到,可以完美支持sql 2005和sql 2008 的。
打开数据库

sql.open(conn_str, function (err, conn) {
    if (err) {
        console.log("Error opening the connection!");
        return;
    }

//这里是查询语句
});

SQL操作

sql.queryRaw(conn_str,"SELECT * FROM TestTable", 

function (err, results) 
{ 
if (err) 
{ 
console.log("Error running query!"); 
return; 
} 
for (var i = 0; i < results.rows.length; i++) 
{ 
  console.log("0:" + results.rows[i][0]); } 
});

注意:此处的写法与wiki文档的写法有些不同,我用过wiki文档的写法(https://github.com/WindowsAzure/node-sqlserver/wiki),有时会出现无法查询数据的情况,w我这种写法是参考源代码中参数的写法,queryRaw包含四个参数:
connectionstring:链接字符串(wiki里面的居然没有用这个,直接用function里面的参数 conn,搞不懂)
query:SQL语句
param:参数(可选的)
callback:回传函数,操作完以后返回的事件

一个完整的例子

var sql=require('msnodesql');
var conn_str="Driver={SQL Server Native Client 11.0};Server={.};Database={nodetest};uid=sa;PWD=123456;";

sql.open(conn_str, function (err, conn) {
        if (err) {
            console.log('发生错误');
        }

        sql.queryRaw(conn_str, "select * from users", function (err, results) {
            if (err) {
                console.log(err);
            }
            else {
                for (var i = 0; i < results.rows.length; i++) {
                    console.log(results.rows[i][0] + results.rows[i][1]);
                }
            }
        })

    })

其他回答

搜一下:Linux系统下,node.js怎么远程连接SqlServer

相关问答

更多
  • 将SSH终端服务的端口由22修改为别的端口以防攻击黑客直接猜解您的服务器密码 首先修改配置文件 vi /etc/ssh/sshd_config 找到#Port 22一段,这里是标识默认使用22端口,修改为如下: Port 22 Port 50000 然后保存退出 执行/etc/init.d/sshd restart 这样SSH端口将同时工作与22和50000上。 现在编辑防火墙配置:vi /etc/sysconfig/iptables 启用50000端口。 执行/etc/init.d/iptables re ...
  • telnet、putty、realvnc,这些都可以. windows连接linux的话,可以使用cmd中的telnet工具,但是vista需要先激活一下此功能。 putty是一个可以下载的工具,支持多种方式远程连接linux,包括telnet和ssh等。 realvnc也是一款工具,它可以以图形界面的方式远程连接linux。 以上均需要linux启动对应服务,包括telnet、sshd和vncserver,其中vnc方式,还需要对配置文件进行修改设置。
  • 是不是没有安装mysql 啊。 执行命令:npm install node-mysql
  • 您可以将字符串函数的包含文件(例如#include )添加到src/connection.cc 。 这应该启用字符串函数; 也许你需要用std::strcmp()替换strcmp() 。 You can add the include files for string functions (e.g. #include ) into src/connection.cc. That should enable the string functions; maybe you ...
  • 以下是蓝色主机关于动态IP地址的说法: 动态IP地址 具有动态IP地址意味着连接IP地址可以根据Internet服务提供商(ISP)定期更改。 每次更改时,必须更新Remote MySQL中的连接IP。 来自https://my.bluehost.com/cgi/help/89 。 因此,至少每次重新部署应用程序时,您都有机会获得不同的IP地址。 所以这看起来非常不切实际。 你为什么不使用Heroku的MySQL产品? Here's what blue host says about dynamic ip ...
  • 您的第三方客户端网站需要包含您的tracker.js(并且由于您的$ .getScript,它们需要包含socket.io + jQuery)。 另一种解决方案是从tracker.js中的CDN加载socket.io(应该是http://cdn.socket.io/stable/socket.io.js )并删除你的jQuery依赖:你的代码可以看起来像像这样(加载socket.io并在加载时执行你的操作): (function(document, onload){ var io = document ...
  • 如果您想要一个低延迟,高效的解决方案,您应该使用WebSockets。 但是,如果浏览器不支持WebSockets,则需要进行回退,例如可以使用长轮询/短轮询。 WebSocket协议提供服务器和客户端之间的全双工(双向)连接。 传统HTTP是半双工(单向)。 此链接将概述使用WebSockets与HTTP的好处: http : //www.websocket.org/quantum.html 。 您需要注意大多数现代浏览器都支持WebSockets,但使用不同的协议。 请参阅此处: 哪些浏览器支持HTML ...
  • 这是一个HTTP PARSER ERROR ,因为您的dockerd会使用HTTPS来表示您正在使用HTTP来连接它。 如果使用tls,则必须将prococol字段设置为https 。 这是我的配置: docker: { host: '192.168.59.103' port: 2376 protocol: 'https' ca: fs.readFileSync(process.env.DOCKER_CERT_PATH + '/ca.pem') cert: fs.readFileSync ...
  • 我:“您确定通过为您的互联网连接设置的代理发送请求吗?” 我:“不” 我:“那样做” 我:“好的,现在它有效” var options = { host: '', port: , path: 'http://www.google.com/index.html' }; http.get(options, function(res) { console.log("Got response: " + res.statusCode ...
  • 您可能希望浏览NodeJS扩展模块的节点包管理器(npm)注册表中的包,这些模块可以组合在一起以使您能够对用户进行身份验证,与外部用户管理系统进行通信等。例如, node-http-digest HTTP摘要认证的扩展 。 You may want to browse through the packages on the node package manager (npm) registry for NodeJS extension modules that can be combined to enab ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)