【发布时间】:2011-08-19 12:13:27
【问题描述】:
我正在尝试通过 php 页面从 MS SQL 中提取数据。我有一个有效的连接,并且正在尝试一个简单的 SELECT * FROM MyTable 但无论我做什么 sqlsrv_num_rows 都是空白的!!!
这是我的代码:
function connect() {
$serverName = DB_HOST; //serverName\instanceName
$connectionInfo = array( "Database"=>DB_NAME, "UID"=>DB_USER, "PWD"=>DB_PASSWORD);
$this->connection = sqlsrv_connect( $serverName, $connectionInfo);
sqlsrv_connect( $serverName, $connectionInfo);
if( $this->connection ) {
echo "<br>Connection established.<br />";
}else{
echo "<br>Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
}
已建立的连接的回声正在工作,所以那里的所有 AOK!
现在当我做一个简单的查询时:
function query($sql) {
if ($this->debug) {
echo $sql . "<br />";
}
$this->sql = $sql;
$this->recordset = sqlsrv_query($this->connection, $sql);
if (!$this->recordset) {
die('<br><br>Invalid query :<br><br><bold>' . $this->sql . '</bold><br><br>' . sqlsrv_errors());
}
echo "<br>rows = " . sqlsrv_num_rows($this->recordset);
我从上面的回声中一无所获?有什么理由吗?或者你能建议一个新的回声我可以尝试调试吗?
我的 DB 类中的所有代码都是从 mysql 转换的,所以可能有一些错误正在造成损害!
我什至尝试过一个超级简单的版本,所有代码放在一起,它仍然是空白/错误:
$server = DB_HOST;
$conn = sqlsrv_connect( $server, array( "Database"=>DB_NAME, "UID"=>DB_USER, "PWD"=>DB_PASSWORD) );
$stmt = sqlsrv_query( $conn, "SELECT * FROM MyTable");
$row_count = sqlsrv_num_rows($stmt);
echo "<br>row count = " . $row_count;
if ($row_count === false)
echo "\nerror\n";
else if ($row_count >=0)
echo "\n$row_count\n";
die;
【问题讨论】:
-
我们能看到$sql的内容吗?
-
对不起,我现在已经修复了,它需要 $options 添加到查询中:发布后立即找到答案!您在查询代码中需要这个: $this->sql = $sql; $params = 数组(); $options = array( "可滚动" => SQLSRV_CURSOR_KEYSET ); $this->recordset = sqlsrv_query($this->connection, $sql, $params, $options); “SQLSRV_CURSOR_KEYSET 允许您以任何顺序访问行。但是,如果从表中删除行(删除的行返回没有值),键集游标不会更新行数。键集是 SQLSRV_CURSOR_KEYSET 的缩写形式。”
-
随意发布您自己的答案 ;-)
-
volkerk 所说的,将其作为答案发布并接受,这样任何搜索的人都可以快速看到找到了解决方案
标签: php sql-server