Php 没有从sqlsrv_num_行中获取任何内容
我正在尝试通过php页面从MS SQL中提取数据。我已经获得了一个有效的连接,并且正在尝试从MyTable中进行简单的SELECT*,但是无论我做什么,sqlsrv_num_行都是空的 这是我的密码:Php 没有从sqlsrv_num_行中获取任何内容,php,sql-server,Php,Sql Server,我正在尝试通过php页面从MS SQL中提取数据。我已经获得了一个有效的连接,并且正在尝试从MyTable中进行简单的SELECT*,但是无论我做什么,sqlsrv_num_行都是空的 这是我的密码: function connect() { $serverName = DB_HOST; //serverName\instanceName $connectionInfo = array( "Database"=>DB_NAME, "UID"=>DB_USER
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));
}
}
函数连接(){
$serverName=DB\u HOST;//serverName\instanceName
$connectionInfo=array(“数据库”=>DB\u名称,“UID”=>DB\u用户,“PWD”=>DB\u密码);
$this->connection=sqlsrv\u connect($serverName,$connectionInfo);
sqlsrv_connect($serverName,$connectionInfo);
如果($this->connection){
echo“
已建立连接。
”;
}否则{
echo“
无法建立连接。
”;
模具(打印错误(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);
函数查询($sql){
如果($this->debug){
echo$sql。“
”;
}
$this->sql=$sql;
$this->recordset=sqlsrv\u query($this->connection,$sql);
如果(!$this->记录集){
die('
无效查询:
'.$this->sql'
'.sqlsrv_errors());
}
echo“
rows=“.sqlsrv\u num\u 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;
$server=DB\u主机;
$conn=sqlsrv_connect($server,array(“数据库”=>DB_名称,“UID”=>DB_用户,“PWD”=>DB_密码));
$stmt=sqlsrv_查询($conn,“从MyTable中选择*);
$row\u count=sqlsrv\u num\u行($stmt);
echo“
行计数=”.$row\u计数;
if($row\u count==false)
回显“\n错误\n”;
如果($row\u count>=0),则为else
回显“\n$row\u count\n”;
死亡
试试这个
替换下面的语句
sqlsrv_query( $conn, "SELECT * FROM MyTable");
作为
我们可以看到$sql的内容吗?很抱歉,我现在已经修复了它,它需要$options添加到查询中:发布后立即找到答案!您需要在查询代码中使用此选项:$this->sql=$params=array();$options=array(“Scrollable”=>SQLSRV\u CURSOR\u KEYSET);$this->recordset=SQLSRV\u query($this->connection,$sql,$params,$options);“SQLSRV_CURSOR_键集允许您以任何顺序访问行。但是,如果从表中删除行(删除的行返回时没有值),则键集光标不会更新行数。键集是SQLSRV_CURSOR_键集的缩写形式。请随意发布您自己的答案;-)volkerk所说的,将其作为答案发布并接受,这样任何搜索的人都可以快速看到找到了解决方案。必须提供一些解释!这有助于更好地理解rader而不是复制粘贴。:)
sqlsrv_query( $conn, "SELECT * FROM MyTable", array(), array("Scrollable"=>"buffered"));