1

単純な SELECT ステートメント、オプションの WHERE 句、および ORDER BY がありますが、sqlsrv_fetch_object() をループしている間、レコードを取得できません。

if (!$conn) 
{
    echo "no connection!\n";
}
$data = array();
$qry = "SELECT DISTINCT lineid, ord_num, prod_num, description, prod_type, style, color, sizetype, qty1, qty2, qty3, qty4, qty5, qty6, qty7, qty8, qty9, qty10, qty11, qty12, qty13, qty14, qty15, ext_id, decoration1, design1, iposition1, cccode1, decoration2, design2, iposition2, cccode2, decoration3, design3, iposition3, cccode3, '', design4, iposition4, cccode4, decoration5, design5, iposition5, cccode5, decoration6, design6, iposition6, cccode6, decoration7, design7, iposition7, cccode7, last_mod FROM DataLIVE.dbo.sodetail ";
if ($last_run_date)
{
    $qry .= "WHERE last_mod > '" . $last_run_date . "' "; 
}
$qry .= "ORDER BY last_mod ASC";
fwrite($fp, $qry . "\n");

if ($st = sqlsrv_query($conn, $qry))
{

    while ($row = sqlsrv_fetch_object($st))
    {
        $row->last_mod      = $row->last_mod->format('Y-m-d H:i:s');
        fwrite($fp, "Last Mod::: " . $row->last_mod . "\n");
        $data[]     = $row;
    }
    sqlsrv_free_stmt($st);
    unset($row, $st);
}
else 
{
    $sqlerr = sqlsrv_errors();
    foreach ($sqlerr as $key)
    {
        foreach ($key as $col => $val)
        {
            echo "Error Key: " . $col . "\nError Msg: " . $val . "\n";
            fwrite($fp, "Error Key: " . $col . "\nError Msg: " . $val . "\n");
        }
    }

    $data = FALSE;
}
return $data;

sqlsrv_fetch_object() が何も返さない理由がわかりません。また、作成中のログからクエリをコピーして SQL Server Studio に直接貼り付けることができます。問題なく解析されます。while ループで last_mod の日付を書き出すログ ファイルには何もありません。

数分前に少し異なる質問でこれを投稿し、誰かが SELECT ステートメントで空の文字列の選択を削除することを提案しましたが、その空の文字列のプレースホルダーが必要です。

4

0 に答える 0