【问题标题】:SELECT in Php with PDO (dblib) to SQL view使用 PDO (dblib) 在 PHP 中选择到 SQL 视图
【发布时间】:2018-01-03 03:10:10
【问题描述】:

我正在尝试执行 SQL 查询,但它不起作用。

$sql = "SELECT top 5 AccountDocument from web.Preoffers_new where AccountDocument = 'xxxxxxxx'";
$stmt = $db->prepare($sql);
$stmt->execute();

if ($data = $stmt->fetch()) {
    do {
        echo $data['AccountDocument'] . '<br>';
    } while ($data = $stmt->fetch());
} else {
    echo 'Empty Query';
}

这完美地工作并向我展示了结果。

但是这个:

$sql = "SELECT top 5 Document from Companies where Document = 'xxxxxxxx'";
$stmt = $db->prepare($sql);
$stmt->execute();

if ($data = $stmt->fetch()) {
    do {
        echo $data['Document'] . '<br>';
    } while ($data = $stmt->fetch());
} else {
    echo 'Empty Query';
}

直接转到空查询。但事实并非如此,因为如果我在 SQL 中执行该查询,它会完美运行。

我看到的唯一不同是第一个查询转到数据库中的表,第二个查询转到一个视图...

一些线索可能是这样的?

    SET 
  ANSI_NULLS, 
  QUOTED_IDENTIFIER, 
  CONCAT_NULL_YIELDS_NULL, 
  ANSI_WARNINGS, 
  ANSI_PADDING 
ON;

更新---->

我设置了属性 PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION 以查看服务器是否显示给我一些东西,我收到了这个:

错误 conectando con la base de datos: SQLSTATE[HY000]: General error: 1934 General SQL Server error: Check messages from the SQL Server [1934] (severity 16) [SELECT top 5 Document from Companies where Document = 'xxxxxxxx']

我检查了 SQL 中的错误,我得到了这个:

%ls 失败,因为以下 SET 选项的设置不正确:'%.*ls'。验证 SET 选项是否适用于 %S_MSG..

有人知道为什么我不能在视图中进行查询吗?

感谢您阅读我:)

【问题讨论】:

  • 您的document = "whatever" 变量吗?证件号码有变化吗?如果是,你应该看看bobby-tables.com 如何正确使用准备好的语句,因为现在它们在你的代码中完全没用。您可以通过简单的查询来做到这一点,无需准备它们。另外,你能告诉我们你的表结构吗?
  • 我不明白你的问题。该查询将数据存储在一个数组中,然后显示它。它适用于其中一个代码,但另一个不适用,唯一的区别是一个指向数据库中的表,另一个指向数据库中的视图。
  • 其实我并没有试图回答你的问题,我只是想让你的代码更安全。我只是问这个xxxxxxxxx 文档编号是否会在你的代码中被硬编码,或者它是否会被一个变量替换,比如Document = $DocumentID - 如果是这样,你实际上应该使用准备好的语句。如果没有,则无需使用它们。
  • 现在是一个数字,但当然如果我使用这个代码我有机会改变。
  • 已解决:错误给了我线索。 .....以下 SET 选项设置不正确...... 错误并没有告诉我什么类型的配置错误。我做了一些测试并放置了以下参数,一切正常: $db->e​​xec("SET ANSI_WARNINGS ON"); $db->e​​xec("SET ANSI_PADDING ON"); $db->e​​xec("SET ANSI_NULLS ON"); $db->e​​xec("SET QUOTED_IDENTIFIER ON"); $db->e​​xec("SET CONCAT_NULL_YIELDS_NULL ON");

标签: php sql pdo


【解决方案1】:

正如我在代码中看到的那样,您使用“Document”而不是“AccountDocument”所以用 Document 替换 AccountDocument。

$sql = "SELECT top 5 Document from Companies where Document = 'xxxxxxxx'";
$stmt = $db->prepare($sql);
$stmt->execute();

if ($data = $stmt->fetch()) {
    do {
        echo $data['Document'] . '<br>';
    } while ($data = $stmt->fetch());
} else {
    echo 'Empty Query';
}

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2016-05-19
    • 2019-11-18
    • 2011-09-21
    • 1970-01-01
    • 2013-03-15
    • 2013-09-08
    • 2013-07-04
    • 2014-03-18
    相关资源
    最近更新 更多