当前位置: 首页 > 知识库问答 >
问题:

编码PHP PDO MS SQL Server

贝成业
2023-03-14

我正在开始学习MSSQLServer的PDO。连接此代码:

$userDB = 'userBD';
$passwordDB = 'passwordDB';

try {
  $DBH = new PDO('mssql:dbname=spr_bank;host=hostname', $userDB, $passwordDB);
  $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

}
catch(PDOException $e) {
    echo "<h1 style='font-weight:bold; color:red;'>Error. Can not connect to Database</h1>";
    file_put_contents('PDOErrors.log', date("Y-m-d H:i:s")." - ".$e->getMessage()."\n", FILE_APPEND);
    exit();
}

现在,我从表中选择数据:

      //simple query and binding with results
      $query = $DBH->prepare("SELECT name FROM spr_sotrudnik WHERE login = :login AND password = :password");

      $login = (isset($_POST['login']) === true) ? $_POST['login'] : '' ; // ? : shorthand for if else
      $password = (isset($_POST['password']) === true) ? md5($_POST['password']) : '' ; // ? : shorthand for if else

      // bind parameters - avoids SQL injection
      $query->bindValue(':login', $login);
      $query->bindValue(':password', $password);

      //try... if not catch exception
      try {
          // run the query
          $query->execute();

          while($rows = $query->fetch()){
            echo $rows["name"];
          }
      }
      catch(PDOException $e){
          echo $e->getMessage(), $e->getFile(), $e->getLine();
      }

当我进入浏览器时,会出现以下错误:

SQLSTATE[HY000]:一般错误:10007 Unicode纯归类中的Unicode数据或ntext数据不能使用DB-库(如ISQL)或ODBC版本3.7或更早版本发送到客户端。[10007](严重性5)[(空)]D:\www\sklad_new\inc\auth.php19

当我编写这个查询时,$query=$DBH-

我没有错误,但我看到了"????"

我怎样才能改变这个?


共有1个答案

充高扬
2023-03-14

您忽略了DSN字符串中的charset参数:

$DBH = new PDO('mssql:dbname=spr_bank;host=hostname', $userDB, $passwordDB);

...所以你可能在整个工具链上使用默认编码。

在任何情况下,PDO_DBLIB驱动程序都被明确标记为实验性的,并包含以下注意事项:

在Windows上,您应该使用SqlSrv,Microsoft提供了MS SQL的替代驱动程序:»http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx .

如果无法使用SqlSrv,则可以使用PDO_ODBC驱动程序连接到Microsoft SQL Server和Sybase数据库,因为本机Windows DB-LIB非常古老,线程不安全,Microsoft不再支持。

根据我的经验,这意味着你可以获得各种不可预测的副作用。

 类似资料:
  • 问题内容: 我正在工作的项目是使用Jackson JSON 序列化程序将一堆Java对象转换为String,以便将它们发送到REST服务。 其中一些对象包含敏感数据,因此我编写了自定义序列化程序以将这些对象序列化为JSON字符串,然后对其进行gzip,然后使用; 对其进行加密。 这会将字符串转换为字节数组,因此我在编解码器中使用Base64编码器将字节数组转换为字符串。REST接口背后的自定义反序

  • 任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode: markup = "<h1>Sacr\xc3\xa9 bleu!</h1>" soup = BeautifulSoup(markup) soup.h1 # <h1>Sacré bleu!</h1> soup.h1.string # u'Sacr\

  • 任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode: markup = "<h1>Sacr\xc3\xa9 bleu!</h1>" soup = BeautifulSoup(markup) soup.h1 # <h1>Sacré bleu!</h1> soup.h1.string # u'Sacr\

  • 在我们真正开始去写代码之前,我们可能会去考虑一些事情。怎么去规划我们的任务,如何去细分这个任务。 如果一件事可以自动化,那么就尽量去自动化,毕竟你是一个程序员。 快捷键!快捷键!快捷键! 使用可以帮助你快速工作的工具——如启动器。 不过不得不提到的一点是:你需要去考虑这个需求是不是一个坑的问题。如果这是一个坑,那么你应该尽早的去反馈这个问题。沟通越早,成本越低。 编码过程 整个编程的过程如下图所示

  • 注: 内容翻译来自官网资料 Encoding. 这封文档描述protocol buffer消息的二进制格式. 在应用中使用protocol buffer不需要理解这些, 但是它对于了解不同的protocol buffer格式对编码消息的大小的影响非常有用. 简单消息 假设你有下面这个非常简单的消息定义: message Test1 { required int32 a = 1; } 在应用中

  • 编码要闻 所谓编码,是因为我们要把汉字,英文单词等,转化为二进制的数字,因为计算机只认识数字。 最开始的编码是ascii,当时还只能储存英文和某些字符,但是因为中国等其它国家并不使用英语,所以我们开始有了自己的编码,但是这个时候就出现了问题,因为它会不能避免的出现一些重合的东西,这个时候就出现了乱码,然后世界开始使用了unicode,不过它有个缺点就是它总是两个字节的储存东西,所以会造成资源的浪费

  • 问题内容: 在Go中编码和解码整个URL的推荐方法是什么?我知道的方法和,但他们似乎并没有被正是我期待的。具体来说,我正在寻找JavaScript 和之类的方法。 谢谢。 问题答案: 您可以使用net / url 模块进行所有想要的URL编码。它不会分解URL各个部分的单独编码功能,您必须让它构造整个URL。斜视了源代码后,我认为它做得很好并且符合标准。 这是一个示例(游乐场链接) 哪些印刷品

  • 问题内容: 这是我的代码,我不明白为什么解码功能不起作用。 请少有洞察力会很棒。 它给了我:[解码错误-输出不是utf-8] [解码错误-输出不是utf-8] 问题答案: 返回 最大 长度。 此长度对于调整缓冲区大小很有用,但是不会写入缓冲区的一部分,因此将不是有效的UTF-8。 您只需要使用函数返回的实际写入长度即可。