2016-09-29 2 views
0

에 있습니다. 프로그래밍에 약간 익숙하지만 SQLSRV를 사용하여 PHP에서 쿼리가 있지만 Excel로 내보낼 때 오류가 발생합니다.경고 : sqlsrv_num_rows()는 매개 변수 1이 리소스가 될 것으로 예상하고, 부울은

경고 : sqlsrv_num_rows은() 매개 변수 (1) 자원이 될 것으로 예상, 부울이 코드입니다

에 주어진 SQL 쿼리 자체가 SQL 서버에서 실행하지만 여기에 엑셀이 나에게 그 오류를 제공, 인터넷 검색 및 검색을 할 수 있지만 답변을 찾을 수없는 경우 코드는 다음과 같습니다.

<?php 

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="Movimientos Cancelados del Mes.xls"'); 
header('Cache-Control: max-age=0'); 

$server = "server"; 
$info = array("Database"=>"DB","UID"=>"USR","PWD"=>""); 
$conn = sqlsrv_connect($server, $info); 
$param = array('ReturnDatesAsStrings'=> true); 
$opt = array("Scrollable" => SQLSRV_CURSOR_KEYSET); 

$per = $_GET["periodo"]; 
$eje = $_GET["ejercicio"]; 
$mov = 'Movimiento'; 
$est = 'Estatus'; 
$cli = 'Cliente'; 
$rfc = 'RFC'; 
$tot = 'Total'; 
$fec = 'Fecha Timbrado'; 
$uuid = 'UUID'; 
$cert = 'Certificado SAT'; 
$sql = "select v.MovID as '$mov',v.Estatus as '$est',v.Cliente as '$cli',cte.rfc as '$rfc',(v.Importe+v.Impuestos)as '$tot', c.FechaTmibrado as '$fec', c.UUID as '$uuid',c.noCertificadoSAT as '$cert' 
from Venta V join CFD c on v.MovID = c.MovID join cte on v.cliente = cte.cliente 
where V.Estatus = 'Cancelado' and c.Periodo = '$per' and c.Ejercicio = '$eje' and c.Empresa = 'MGJ' 
order by FechaEmision"; 

$query = sqlsrv_query($conn, $sql); 

$campos = sqlsrv_num_rows($query); 

$i = 0; 

echo "<table border=''><tr>"; 
echo "<th>$mov</th>"; 
echo "<th>$est</th>"; 
echo "<th>$cli</th>"; 
echo "<th>$rfc</th>"; 
echo "<th>$tot</th>"; 
echo "<th>$uuid</th>"; 
echo "<th>$cert</th>"; 

while ($i<$campos) { 
    echo "<td>".sqlsrv_get_field($query,$i); 
    echo "</td>"; 
    $i++; 
} 
    echo "</tr>"; 
while($row=sqlsrv_fetch_array($query)){ 
    echo "<tr>"; 
    for ($j=0; $j < $campos; $j++) { 
     echo "<td>".$row[$j]."</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 
    sqlsrv_close($conn); 
print_r(sqlsrv_errors(),true); 
?> 
+0

사용할 수 있습니다 참조하십시오. 엑셀이 이것과 관련이 있다는 점도 분명하지 않다. 엑셀에는 PHP를 실행할 수있는 드라이버가 있는가? SQL 인젝션에 대해서도 열려 있습니다. – chris85

+0

또한이 오류에 대한 줄 번호를 제공합니다. 코드의 어느 부분에 오류가 있는지에 대한 단서를 알려주시겠습니까? 우리가 머리에서 수동으로 컴파일 할 때까지 살펴 보겠습니다. – RiggsFolly

+0

http://php.net/manual/en을 읽으십시오. /function.sqlsrv-query.php 당신이 쿼리를 실행하고있을 때 실패했다는 것은 $ query가 FALSE임을 의미합니다; 리소스 대신 bool을 전달하려고하면 오류가 발생합니다. 대신 PDO를 사용하는 것이 좋습니다. – Rawrskyes

답변

0

경고 : sqlsrv_num_rows()는 매개 변수 (1) 자원,

그것은 의미에서 주어진 부울 쿼리 컴파일하거나 실행하는 데 실패 때문에 자원 객체를 반환하지 않는 쿼리가 될 것으로 기대하고있다. 이런 일이 발생하는 이유

당신이 당신의`$의 query` 오류에 대한 검사를 실행, 실패 sqlsrv_errors()

if(($errors = sqlsrv_errors()) != null) { 
    foreach($errors as $error) { 
     echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />"; 
     echo "code: ".$error[ 'code']."<br />"; 
     echo "message: ".$error[ 'message']."<br />"; 
    } 
} 
+0

왜 내가 대답 할 수 있습니다 – RiggsFolly

+0

@ RiggsFolly 그것을 알아 내려고 애 쓰고 있습니다 –

+0

쿼리가 컴파일 또는 실행에 실패했기 때문에 귀하의 쿼리가 리소스 object_를 반환하지 않습니다. – RiggsFolly

관련 문제