【问题标题】:Can't retrieve data from MS SQL with PDO无法使用 PDO 从 MS SQL 检索数据
【发布时间】:2014-10-20 08:08:57
【问题描述】:

我在本地计算机上使用 PDO 连接到 MS SQL 服务器以使用准备语句。驱动安装正确,可以连接数据库。代码如下:

try {
    $con = new PDO("sqlsrv:Server={$host};Database={$db_name}", $username, $password);
    }
catch(PDOException $exception){
echo "Connection error: " . $exception->getMessage();
}

$query = "SELECT TOP 10 ClientID FROM CLIENT";
$stmt = $con->prepare($query);
$stmt->execute();
$num = $stmt->rowCount();
print $num;

从 SSMS 查询按应有的方式返回,但代码中没有任何内容,因为它打印 -1 作为 $num 的结果。如果我将查询更改为SELECT @@VERSION,它会正确打印版本但不是我的查询。我的查询来自 SSMS,PDO 可以连接到服务器,但无法弄清楚问题出在哪里,这太令人沮丧了,请帮忙。

【问题讨论】:

  • 来自文档:PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。如果关联的 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。然而,这种行为并不能保证适用于所有数据库,不应依赖于 [...]
  • @GeraldSchneider 我明白了。感谢您的链接。

标签: php sql-server pdo


【解决方案1】:

你能试试吗:

try {
    $con = new PDO("sqlsrv:Server={$host};Database={$db_name}", $username, $password);
    }
catch(PDOException $exception){
echo "Connection error: " . $exception->getMessage();
}

$query = "SELECT TOP 10 ClientID FROM CLIENT";
$stmt = $con->prepare($query);
$stmt->execute();
$rows = $stmt->fetchAll();
$num = count($rows);
print $num;

// To print results :
foreach ($rows as $row) {
    echo $row["ClientID"] . "<br/>";
}

【讨论】:

  • 这行得通。谢谢。无论如何,我如何打印行?我的代码是在格式化表格中提取之前的行:
  • if($num&gt;0){ while ($row = $stmt-&gt;fetch(PDO::FETCH_ASSOC)){ extract($row); echo "&lt;tr&gt;"; echo "&lt;td&gt;{$Date}&lt;/td&gt;";
猜你喜欢
  • 2021-04-02
  • 1970-01-01
  • 2011-06-28
  • 2013-05-12
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
相关资源
最近更新 更多