mssql_fetch_array

(PHP 4, PHP 5, PECL odbtp >= 1.1.1)

mssql_fetch_array連想配列・数値添字配列・あるいはその両方で結果の行を取得する

警告

この関数は PHP 7.0.0 で 削除 されました。

この関数の代替として、これらが使えます。

説明

mssql_fetch_array ( resource $result [, int $result_type = MSSQL_BOTH ] ) : array

mssql_fetch_array() は、 mssql_fetch_row() の拡張版です。 この関数は、結果の配列に数値インデックスにデータを保持するのに加えて、 フィールド名をキーとしてデータを連想配列にも保存します。

機能がかなり増えているにもかかわらず、mssql_fetch_array()mssql_fetch_row() よりもそれほど遅くはないということを強調しておきます。

パラメータ

result

処理対象となる結果リソース。これは mssql_query() のコールによって取得します。

result_type

取得する配列の形式。定数で、以下のいずれかの値となります。 MSSQL_ASSOCMSSQL_NUM あるいは MSSQL_BOTH

返り値

取得された行に対応する配列、行がもうない場合に FALSE を返します。

例1 mssql_fetch_array() の例

<?php
// select クエリを MSSQL に送信します
$query mssql_query('SELECT [username], [name] FROM [php].[dbo].[userlist]');

// レコードがあるかどうかを調べます
if (!mssql_num_rows($query)) {
    echo 
'No records found';
} else {
    
// 次のコードは、これと同じ意味です
    //
    // while ($row = mssql_fetch_row($query)) {

    
while ($row mssql_fetch_array($queryMSSQL_NUM)) {
        
// ...
    
}
}

// 結果を開放します
mssql_free_result($query);
?>

注意

注意: この関数により返されるフィー ルド名は 大文字小文字を区別 します。

注意: この関数は、 NULL フィールドに PHPの NULL 値を設定します。

参考

add a note add a note

User Contributed Notes 13 notes

up
4
blood - demon at gmx dot net
17 years ago
Note that if you fetch varchar fields larger than 255 letters the result will be cut off at 255 letters.

To prevent this you have to do a CONVERT(TEXT,data_field) for this fields in your select clause.
up
2
Bryan
17 years ago
Calling this function with the option second parameter is causing a "Wrong parameter count" message. If you run into this problem, you can get the same effect by calling different functions:

mssql_fetch_array: MSSQL_BOTH
mssql_fetch_assoc: MSSQL_ASSOC
mssql_fetch_row: MSSQL_NUM
up
2
hackajar matt yahoo trot com
20 years ago
from php-dev mailing list article -
#26012 [Bgs]: mssql_fetch_array

"Previously mssql data was always rtrimed, however that's wrong because it modifies the original data. This caused a problem for people who needed those trailing space. Ultimately, the job of database extension is to fetch the data as is (like other db extensions already do) and not to mangle it in any way."

moving from <4.3.4 to a higher version you will have this now:

$query = "Select dumb_spaces from dbo.table where weak_sause = 'true'";
$result = mssql_query($query) or die("Spicy Sause! Query = $query");

while($line = mssql_fetch_array($result, MSSQL_ASSOC) {
     foreach($line as $bs_trim) {
          //Trim whitespace from end of query
          $bs_trim = rtrim($bs_trim);
          echo "Clean!".$bs_trim;
     }
}
up
1
archwisp at gmail dot com
20 years ago
[Editor's Note: NULLs *are* distinguishable from 0.  See the manual section on comparison operators. ]

microsoft sql 2000 server
php running on windows 2000

Using the $row = mssql_fetch_array($result)

A null value will return 0, this is a problem if you are using 0 and some identifier for a value.  you should convert all nulls to something like -1 or "NO VALUE"

******

After extensive testing, the above statements both seem to be true. You *can* distinguish between 0 and null values in PHP; however, the mssql_fetch_array function does not set null colums to the php NULL value.

if ($row['Null_Column'] === 0) { print('pass'); }

A null column passes the above test. Seems to be a bug in the function.
up
1
flatcable2000 at yahoo dot com
21 years ago
Apparently php 4.0.6 does not support the second parameter. When used the error sounds
"Wrong parameter count for mssql_fetch_array"
up
2
shaver at qspeed dot com
21 years ago
Note that the second parameter is the same as the msql version of this function (http://www.php.net/manual/en/function.msql-fetch-array.php) with the constants (MSQL_ASSOC, MSQL_NUM, and MSQL_BOTH) changing to MSSQL_.

Also note that if you don't specify this parameter you'll get both the numbers and column names, which can cause some frustration.
up
1
php at bricology dot com
16 years ago
I just spent a few hours trying to get ntext data with this function, CASTing and CONVERTing every which way, and scouring the 'net. Nothing worked, I just got a NULL.

Then on a whim I tried it with mssql_fetch_row instead, and that DOES work.
up
0
chu61 dot tw at gmail dot com
16 years ago
To write Unicode (nvarchar) to SQL2000/2005 use PHP
用PHP在SQL Server 存取Unicode資料
----------------------------------------------

Let's assume, we have following data table, that allows us to store unicode values (using UCS-2 encoding):

    create table mytable    (
        myfield nvarchar (100) null
    );

Below is the code to work with:

<?php
    $link
= mssql_connect('dbhost', 'username', 'password');
   
mssql_select_db('database', $link);

   
// sending data to database
   
$utf8 = 'some unicode UTF-8 data'// some Greek text for example ;)
   
$ucs2 = iconv('UTF-8', 'UCS-2LE', $utf8);

   
// converting UCS-2 string into "binary" hexadecimal form
   
$arr = unpack('H*hex', $ucs2);
   
$hex = "0x{$arr['hex']}";

   
// IMPORTANT!
    // please note that value must be passed without apostrophes
    // it should be "... values(0x0123456789ABCEF) ...", not "... values('0x0123456789ABCEF') ..."
   
mssql_query("insert into mytable (myfield) values ({$hex})", $link);

   
// retrieving data from database
    // IMPORTANT!
    // please note that "varbinary" expects number of bytes
    // in this example it must be 200 (bytes), while size of field is 100 (UCS-2 chars)

   
$result = mssql_query("select convert(varbinary(200), myfield) from mytable", $link);

    while ((
$row = mssql_fetch_array($result, MSSQL_BOTH)))
    {
       
// we get data in UCS-2
        // I use UTF-8 in my project, so I encode it back
       
echo(iconv('UCS-2LE', 'UTF-8', $row['myfield']));
    }

   
mssql_free_result($result);
   
mssql_close($link);
?>
up
0
gillis dot phpmanual at no-spam-for-megillis dot fi
19 years ago
Allthough probably obvious to people who have used the functions available to other databases it during writing is not present in this entry that result type can be entered as MSSQL_ASSOC or MSSQL_NUM, and the default value when nothing entered being MSSQL_BOTH

//Gillis Danielsen
up
0
archwisp at gmail dot com
20 years ago
In response to my last post:

After further testing, it appears as though the null column bug only affects windows installations. On my linux installation using freetds-0.61.2, the function behaves properly. It must exist either in the php_mssql.dll or the Microsoft connection libraries. And since I use this functionality through ASP as well (which uses the Microsoft connection libraries), it would lead me to believe that it's an issue within the php_mssql.dll.
up
0
ask at manniac dot de
22 years ago
It seems that this function creates arrays wich keys can not be longer than 30 chars. So when you're having a DB-field like "this_is_a_very_long_db_field_name"
its array-key is cut off after 30 chars and you will have to access the value with
rs["this_is_a_very_long_db_field_n"]
up
-1
herriedm at yahoo dot com
21 years ago
[Editor's Note: NULLs *are* distinguishable from 0.  See the manual section on comparison operators. ]

microsoft sql 2000 server
php running on windows 2000

Using the $row = mssql_fetch_array($result)

A null value will return 0, this is a problem if you are using 0 and some identifier for a value.  you should convert all nulls to something like -1 or "NO VALUE"
up
-1
Derek Ethier
20 years ago
The array_walk function is also useful for stripping the whitespace returned in an mssql_query.

function modify_field(&$array) {
    $array = trim($array);
}

$query = "select * from dbo.table where value = '0'";
$result = mssql_query($query) or die;

while ($row = mssql_fetch_array($result)) {
    // This will call the above function.
    array_walk($row, 'modify_field');
    array_push($eventresults, $row);
}

An added benefit is that you can expand the modify_field function to handled unexpected returned column data.
To Top