我正在使用IIS的sqlsrv驱动程序,因此我可以使用PHP连接到MS SQL服务器。
我设法转换了很多原始的mysql_代码,一切顺利,直到我尝试从数据库中选择一些DateTime字段。他们在PHP而不是字符串中作为Date对象返回,我找到了将其添加到连接数组的修复程序:
'ReturnDatesAsStrings'=→1
因为在尝试填充我的记录集时我的代码被破坏了,所以这样做了:
function row_read($recordset) {
if (!$recordset) {
die('<br><br>Invalid query :<br><br><bold>' . $this->sql . '</bold><br><br>' . sqlsrv_error());
}
$rs = sqlsrv_fetch_array($recordset);
return $rs;
}
错误是:sqlsrv_fetch_array():16不是有效的ss_sqlsrv_stmt资源
谷歌的错误提供了这么少的帮助,所以这是我唯一的一个镜头!我只是不明白。
从while:while($ row = $ db-&gt; row_read($ rs)){
中调用row_read有什么想法吗?
只是为了添加更多代码和逻辑 - 我对所有订单进行简单的SELECT,然后当它循环遍历它们时,我在订单表上再执行2个SELECT,然后是customer表。当我尝试这些额外的2'获得'时它会掉下来:
$this->db->sql = "SELECT * FROM TicketOrders";
$rs = $this->db->query($this->db->sql);
$this->htmlList->path("skin/search.bookings");
if ($this->db->row_count != 0) {
while ($row = $this->db->row_read($rs)) {
// Load the order row
$this->TicketOrders->get($this->db, $row['Id']);
// Load the customer row
$this->Customers->get($this->db, $row['CustomerId']);
答案 0 :(得分:4)
您是否通过其他功能传递了此资源变量?如果是,您可以尝试执行sqlsrv_query
并在一个函数中执行sqlsrv_fetch_array
;不要通过其他函数传递ss_sqlsrv_stmt
资源。希望它会有所帮助。
答案 1 :(得分:2)
您的程序是否涉及嵌套查询功能?
如果是这样,下一个问题是:你是否在内部查询功能中打开了同一个数据库?
尝试以下更改:
换句话说,外循环可能有:
$tring = sqlsrv_query($myConn, $dbx_str1);
while( $rs_row1 = sqlsrv_fetch_array($tring, SQLSRV_FETCH_ASSOC))
并且内部循环将具有:
$tring2 = sqlsrv_query($myConn, $dbx_str2);
while( $rs_row2 = sqlsrv_fetch_array($tring2, SQLSRV_FETCH_ASSOC))
答案 2 :(得分:0)
sqlsrv_fetch_array
需要ss_sqlsrv_stmt资源。您的 SQL 一定有问题。