#php #sql #sqlsrv
#php #sql #sqlsrv
Вопрос:
Возможно, пометьте мой пост как дубликат, я искал, но не могу найти ответ на свою проблему, я перепробовал все, что видел в ответах на другой пост, но все равно выдает мне ту же ошибку: Fatal error: вызов функции-члена format () для не-объекта в … Это код:
<?php
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="Movimientos Cancelados del Mes.xls"');
header("Pragma: no-cache");
header("Expires: 0");
$server = "192.168.1.240";
$info = array("Database"=>"Ariel","UID"=>"sa","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.UUID as '$uuid',c.noCertificadoSAT as '$cert', c.FechaTimbrado as '$fec'
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";
var_dump($fec);
$query = sqlsrv_query($conn, $sql);
if( $query === false ) {
if( ($errors = sqlsrv_errors() ) != null) {
foreach( $errors as $error ) {
echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
echo "code: ".$error[ 'code']."<br />";
echo "message: ".$error[ 'message']."<br />";
}
}
}
$campos = sqlsrv_num_fields($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 ($row = sqlsrv_fetch_array($query)) {
$mov = $row['Movimiento'];
$est = $row['Estatus'];
$cli = $row['Cliente'];
$rfc = $row['RFC'];
$tot = $row['Total'];
$uuid = $row['UUID'];
$cert = $row['Certificado SAT'];
$fec = $row['Fecha Timbrado'];
echo "<tr>";
echo "<td>".$mov."</td>";
echo "<td>".$est."</td>";
echo "<td>".$cli."</td>";
echo "<td>".$rfc."</td>";
echo "<td>".$tot."</td>";
echo "<td>".$uuid."</td>";
echo "<td>".$cert."</td>";
echo "<td>".$fec->format("d/m/Y")."</td>";
}
echo "</table>";
sqlsrv_close( $conn);
?>
И посмотрите и посмотрите в Интернете, но я нахожу, что это выдает мне ошибку, самое смешное, что с ошибкой отображаются только некоторые результаты, есть некоторые, которые при печати на экране, но после нескольких строк, выдает ошибку, это может быть сначала, это может быть ближе к концузапрос, игнорирующий первые несколько строк кода, предназначен для экспорта в Excel … Ошибка отмечена в строке 75, которая:
echo "<td>".$fec->format("d/m/Y")."</td>";
Комментарии:
1. точно так же, как @Fred-ii- указал, вам нужно сначала объявить
DateTime
объект типа:$myDate = new DateTime($fec);
и, сделав это, затем используйтеformat
метод:$myDate->format("d/m/Y");
….Вамос Рикардо, нет нет хагас кведар мал …. салудос де Чили 🙂2. ^ esattamente (scusi, parlo italiano solamente, ma capito spagnola un po) saludos de Canada 😉
3. @RicardoRomero можете ли вы показать нам, какие значения находятся в
Fecha Timbrado
столбце? Примечание: не рекомендуется использовать именованные столбцы с пробелами, поскольку они, как правило, проблематичны. Лучше всего использовать символы подчеркивания.4. Возможно, у вас есть даты в другом формате … Я думаю, что объект ожидает строку даты и времени в английском формате (например, гггг-мм-дд ЧЧ: мм: сс) … и я думаю, что у вас есть
30/09/2016
что-то вроде или что-то в этом роде в вашей БД…5. Теперь я вижу, что происходит, некоторые результаты в столбце FechaTimbrado являются нулевыми значениями, вы знаете, как я могу напечатать нулевое значение? @Fred-ii-
Ответ №1:
Публикация в качестве вики сообщества, поскольку она была решена в комментариях с несколькими предложениями к OP.
If (! empty($variable)) echo($variable); else echo ('NULL');
является окончательным решением проблемы.