It is probably worth pointing out that the array elements will actually be of type string, OR NULL if the field is null in the database.
Thus, either use a double equal comparison to look for empty or null
Or, use a triple equal comparison to be able to distinguish the two cases
e.g.
if ($field === '') echo "Empty, not NULL\n";
if ($field === NULL) echo "NULL\n";
if ($field == '') echo "Empty or NULL\n";
mysql_fetch_row
(PHP 4, PHP 5)
mysql_fetch_row — Liefert einen Datensatz als indiziertes Array
Beschreibung
$result
)Liefert ein numerisch indizertes Array, das der geholten Zeile entspricht und bewegt den internen Datenatzzeiger vorwärts.
Parameter-Liste
-
Ergebnis -
Das Ergebnis Ressource, das ausgewertet wird. Dieses Ergebnis kommt von einem Aufruf von mysql_query().
Rückgabewerte
Gibt ein numerisches Array von Zeichenketten zurück, das der gelesenen
Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind.
mysql_fetch_row() liefert einen Datensatz aus dem Anfrageergebnis mit der übergebenen Kennung. Der Datensatz wird als Array geliefert. Jedes Feld wird in einem Array-Offset abgelegt, der Offset beginnt bei 0.
Beispiele
Beispiel #1 Eine Zeile mit mysql_fetch_row() holen
<?php
$result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
echo 'Konnte Abfrage nicht ausführen: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
echo $row[0]; // 42
echo $row[1]; // der email Wert
?>
Anmerkungen
Hinweis: Diese Funktion setzt NULL-Felder auf den PHP Wert-
NULL.
Siehe auch
- mysql_fetch_array() - Liefert einen Datensatz als assoziatives Array, als numerisches Array oder beides
- mysql_fetch_assoc() - Liefert einen Datensatz als assoziatives Array
- mysql_fetch_object() - Liefert eine Ergebniszeile als Objekt
- mysql_data_seek() - Bewegt den internen Ergebnis-Zeiger
- mysql_fetch_lengths() - Liefert die Länge eines jeden Feldes in einem Ergebnis
- mysql_result() - Liefert Ergebnis
to print an array, simply use print_r(array name)
like this:
$myrow = mysql_fetch_row($result);
echo "<pre>";
print_r($myrow);
echo "</pre>";
this will output the array in a readable form, with the index, too. Don't forget the 'pre' tags or the output will be on a single line.
The following function to read all data out of a mysql-resultset, is may be faster than Rafaels solution:
<?
function mysql_fetch_all($result) {
while($row=mysql_fetch_array($result)) {
$return[] = $row;
}
return $return;
}
?>
The following are the basic codes to get a specific row from the mysql db into a $row variable:
$query = "SELECT * FROM table";
$result = mysql_query($query);
$row = mysql_fetch_row($result);
And $row[0], $row[1] ... $row[n] are used to access those field values.
Does anyone know how I can add a new field to $row, so that the field count increases from n to n+1?
I have tried treating $row like an array, and tried array_push function, but didn't work.
Thanks.
Maybe worth pointing out that all the fields returned by this (and other?) calls are returned with type string. This had me puzzled for quite some time.
If you need to quickly just grab all of a particular column (for example, with a "SELECT DISTINCT a FROM x" query), this quick function will just slice through and fetch an array of the resultant values:
<?
function mysql_slice($query, $colNo=0) {
// Return an array of single columns
if(gettype($query) == 'string') {
$sql = mysql_query($query) or die(mysql_error());
} else {
$sql = $query;
var_dump($query);
}
$array = array();
for($i = 0; $i < mysql_num_rows($sql); $i++) {
$array[] = mysql_result($sql, $i, $colNo);
}
mysql_free_result($sql);
return $array;
}
?>
To use it:
<?
foreach(mysql_slice("SELECT DISTINCT field FROM table") AS $x) {
echo "{$x}\n";
}
// OR
$array = mysql_slice("SELECT DISTINCT field FROM table");
var_dump($array);
?>
Creates table from all db info:
<?php
$qry = "SELECT * FROM exp_member_data";
$res = mysql_query($mem_qry);
function mysql_fetch_all($res) {
while($row=mysql_fetch_array($res)) {
$return[] = $row;
}
return $return;
}
function create_table($dataArr) {
echo "<tr>";
for($j = 0; $j < count($dataArr); $j++) {
echo "<td>".$dataArr[$j]."</td>";
}
echo "</tr>";
}
$all = mysql_fetch_all($res);
echo "<table class='data_table'>";
for($i = 0; $i < count($all); $i++) {
create_table($all[$i]);
}
echo "</table>";
?>
sry :) note now fixed:
<?php
$esi=mysql_list_tables($db);$ris=mysql_fetch_row($esi);
//example: $db has >= 1 tabs
echo var_dump($ris);
//echoes only array(1). solution:
while($ris=mysql_fetch_row($esi)) echo $ris[0];
/*debug:
$ris=array("1st_tab"); ... $ris=array("n_tab");$ris=false;*/
while ($ris[]=mysql_fetch_row($esi));
//debug:$ris=array(array("1st_tab"), ... array("n_tab"));
echo $ris[n][0];//echo:"n_tab"
echo $ris[0][n];//echo:array | null
?>
hope it helps
