使用带有以下代码的PDO_ODBC从PHP访问Microsoft SQL数据库时,我遇到了编码问题.当输出时,DB中的文本出现乱码.
$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;charset=UTF-8";
$pdo = new PDO($dsn,$username,$password);
$sql = "SELECT text FROM atable";
$result = $PDO->query($sql);
while($data = $result->fetchObject()){
$values[] = $data->text;
}
dpm($values);
Run Code Online (Sandbox Code Playgroud)
乱码输出http://image.bayimg.com/naomcaacd.jpg
这是从Drupal模块完成的.Drupal中的所有内容都与UTF-8一起使用.最干净的解决方案是能够以UTF-8从数据库中检索数据,或者在输出之前将其转换为UTF-8.
我没有成功地试过这些
$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;client_charset=utf-8"$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;charset=utf-8"$pdo->exec('SET NAMES utf8') 后 new PDO(...)$pdo->exec('SET CHARACTER SET utf8'); 后 new PDO(...)PS:代码目前是在Windows上开发的,但它也必须在GNU/Linux上运行.
我想编写一个HTTP服务器,使用非标准HTTP方法(动词)回答请求.例如,客户端会发出类似的请求FOO / HTTP/.1.1.在服务器端,此请求将由以下内容处理:
var express = require('express');
var app = express.createServer();
app.configure(function(){
app.use(express.logger({ format: ':method :url' }));
app.use(express.methodOverride());
});
app.foo('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
Run Code Online (Sandbox Code Playgroud)
我将非标准方法附加到ExpressJS中导出的数组中lib/router/methods.js.这允许我按预期编写我的服务器代码.使用express.methodOverride()和POST请求时_method=foo,它的工作原理.但实际的FOO请求不起作用.一旦客户端发送请求的第一行,服务器就会关闭连接:
$telnet localhost 3000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
FOO / HTTP/1.1
Connection closed by foreign host.
Run Code Online (Sandbox Code Playgroud)
我希望能够使用ExpressJS实现这一点,而不会避免入侵其核心文件.
知道这是否可行以及怎么做?
我正在使用以下设置从PHP应用程序访问MS-SQL数据库
非参数化查询工作正常.唯一的问题是被迫关闭单个结果语句(使用PDOStatment :: closeCursor)以避免"0 [FreeTDS] [SQL Server]无效游标状态(SQLSTATE = 24000)"错误.
但是我遇到了类型绑定参数的一个主要问题.使用这样的代码时:
$stmt = $PDO->prepare('INSERT INTO table (column1, column2) VALUES (:foo, :bar');
$stmt->bindValue(':foo', 21, PDO::PARAM_INT);
$stmt->bindValue(':bar', 42, PDO::PARAM_INT);
$stmt->execute():
if (!$stmt->execute()) {
var_dump($stmt->errorInfo();
}
Run Code Online (Sandbox Code Playgroud)
两列都是INT.我得到一个"206 [FreeTDS] [SQL Server]操作数类型冲突:文本与int [SQLSTATE = 22018]"错误不兼容.
在unixODBC日志中,我得到类似的东西
[ODBC][26251][SQLDescribeParam.c][175]
Entry:
Statement = 0x2b73c849fb80
Parameter Number = 1
SQL Type = 0x7fff9c89e15e
Param Def = 0x7fff9c89e154
Scale = 0x7fff9c89e15c
Nullable = 0x7fff9c89e15a
[ODBC][26251][SQLDescribeParam.c][276]Error: IM001
[ODBC][26251][SQLBindParameter.c][193]
Entry:
Statement = 0x2b73c849fb80 …Run Code Online (Sandbox Code Playgroud) 我有一个自定义表单(使用表单API创建),需要通过电子邮件发送上传的文件.当前表单提交处理程序使用drupal_mail()发送没有附件的电子邮件.
所以我正在寻找一个解决方案来正确发送带有Drupal附件的电子邮件.Mime Mail似乎有点矫枉过正,因为不需要HTML邮件,模板和其他功能.但我看到的唯一其他选择是在我的hook_mail()实现中处理邮件时设置适当的标题并序列化邮件正文中的附件.
我错过了什么吗?有没有可以处理这个的模块?
我正在使用Drush和Drush Make来自动从NTLM-SSPI代理后面的公司网络下载Drupal模块.Drush和Drush Make使用cURL下载文件.cURL支持NTLM-SSPI代理.我在.curlrc文件中为代理配置了cURL
--proxy proxy.example.com:8080
--proxy-ntlm
--proxy-user user:password
Run Code Online (Sandbox Code Playgroud)
Drush本身可以从drupal.org下载模块,因为它使用curl命令行.但Drush Make使用PHP cURL API(libcurl).看起来像这样使用时,cURL不使用我的.curlrc文件中的配置.
有没有办法用.curlrc文件配置libcurl/PHP cURL?
当使用具有许多文本输入的表单时,当在任何输入元素中按下"输入"时,WebKit/Safari/Google Chrome会提交表单.即使没有提交输入元素也没有注册onclick处理程序.
例如,请参阅此示例代码:
<html>
<body>
<form method="POST" action=".">
<ul>
<li><input type="text" name="foo" value="<?=rand()?>"/></li>
<li><input type="text" name="bar" value="<?=$_POST['foo']?>"/></li>
</ul>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当在两个文本输入元素中的任何一个中按Enter键时,将提交表单.
由于我使用异步HTTP请求在JavaScript中处理我的表单,因此我需要阻止此行为.我可以为keypressed事件注册一个自定义处理程序来阻止默认和stopPropagation.但它看起来很丑陋,并且在动态添加新的文本输入元素时并不实用.