0

PHP の学習を始めたばかりで、mysql_result を sqlsrv を使用するものに変換するのに苦労しています。

変換しようとしているコードは次のとおりです:(完全なコードを含めるように編集されています)

 function database($querydb) {

global $global;
global $field;

if (isset($global['queries'])) {
    $global['queries']++;
} else {
    $global['queries'] = "1";
}
$field['queries'] = $global['queries'];
if (isset($global['query_log'])) {
    $global['query_log'] .= "\n<br>$querydb";
} else {
    $global['query_log'] = "$querydb";
}

$serverName = "XXX";
$uid = "XXX";
$pwd = "XXX";
$dbName = "XXX";


$connectionInfo = array("UID" => $uid, "PWD" => $pwd, "Database" => $dbName, "ReturnDatesAsStrings"=>true);

$conn = sqlsrv_connect($serverName, $connectionInfo);

$stmt = sqlsrv_query($conn, $querydb) or return_error("Query Error: $querydb");

    while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC) ) 
        {
        $global['dbresult'] = $row;
        }


if ((substr($querydb,0,6)!="INSERT") && (substr($querydb,0,6)!="UPDATE") && (substr($querydb,0,6)!="DELETE")) {

while ($row1 = sqlsrv_fetch_array($stmt))
{
$global['dbnumber'] = mysql_numrows($global['dbresult']);  // original $dbnumber
}

return;

}

function return_error($error) {
print $error;
exit;
}

function date_status($date, $username) {

global $global;
global $field;
global $input;
global $text;

$status = "0";

if ($username!="") {

    $query = "SELECT countedrow.total, id, start_date, end_date FROM calendar JOIN (SELECT total = COUNT(*) FROM oc_calendar) AS countedrow ON 1=1";

    database($query);


    for ($i = 0; $i < $global['dbnumber']; $i++) {

        $status = "1";

        $event_id = sqlsrv_fetch_array($global['dbresult'],$i,"id"); 


    }
}

return $status;

}

私はsqlsrv_get_field、sqlsrv_fetch、sqlsrv_fetch_arrayを試しましたが、明らかに構文が正しくなく、次のエラーが発生しているため、これを誤解しています:

sqlsrv_fetch_array() は、パラメーター 1 がリソースであると想定し、配列で指定されます...

...私が何をしても。

配列から id を抽出して $event_id を設定するにはどうすればよいですか? どこが間違っていますか?

4

2 に答える 2

0
$querydb = "SELECT countedrow.total, id, start_date, end_date FROM oc_calendar JOIN (SELECT total = COUNT(*) FROM oc_calendar) AS countedrow ON 1=1";

$stmt = sqlsrv_query($conn, $querydb);

if( $stmt === false) {
    die( print_r( sqlsrv_errors(), true) );
}

while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    $event_id = $row["id"];
}

これは機能しますか?

いったいなぜ、しばらくの間すべての行を個別に globalvar にマッピングし、グローバル var を再びループさせたのでしょうか。関数からグローバルに戻す必要がある場合は、すべてを直接ループしてから、グローバルではなく戻り配列として渡します

于 2013-06-25T10:51:39.003 に答える