Hello, I have to code a compatibility layer under PHP5 for PostgreSQl and MySQL, which mean, I have to code something like db_query() which then can be used with mysql_query() and pg_query().
But now I have hit an weird error, since in PostgreSQL it is wotking but
in MySQL it get the right number of values but NO the value itself.
I use:
----[ '~/.tdphp-vserver/includes/database_mysql.inc' ]------------------
<snip>
} elseif (DB_TYPE == 'mysql') {
function db_connect($host=DB_HOST, $port=DB_PORT, $database=DB_NAME,
$user=DB_USER, $pass=DB_PASS, $link='db_link') {
global $$link;
$$link=mysql_connect($host . ':' . $port, $user, $pass);
if (!$$link) { db_error($query, '', mysql_error()); }
$tmp=mysql_select_db($database, $$link);
if (!$tmp) { db_error($query, '', mysql_error()); }
return $$link;
}
function db_close($link='db_link') {
global $$link;
return mysql_close($link);
}
function db_error($query, $errno, $error) {
die("<FONT size=\"+2\" color=\"red\"><B>Error $errno</B></FONT><HR
size=\"+3\" noshade>$error<P>$query");
}
function db_query($query) {
global $$link;
$result=mysql_query($query) or db_error($query, '', mysql_error($$link));
return $result;
}
function db_fetch_array($db_query) {
return mysql_fetch_array($db_query, MYSQL_NUM);
}
function db_free_result($db_query) {
return mysql_free_result($db_query);
}
function db_fetch_fields($db_query) {
return mysql_fetch_fields($db_query);
}
function db_input($string) {
return mysql_real_escape_string($string);
}
------------------------------------------------------------------------
and the code which produce the error is:
----[ '~/.tdphp-vserver/includes/10_electronica_admin.inc' ]------------
<snip>
function setupOverviewProjects($type='projects') {
if ($type == 'sub_projects') {
$VAL1="Current Sub-Projects";
$VAL2="sub_projects";
} else {
$VAL1="Current Main-Projects";
$VAL2="projects";
}
$output = "<div class=\"setupOverviewBorder\">\n";
$output .= "<div class=\"setupOverviewTitle\">" . T_gettext($VAL1) .
"</div>\n";
$output .= "<br />\n";
$output .= " <ol class=\"setupOverviewNameList\">\n";
$DB_connect=db_connect()
or die('Could not connect: ' . db_error());
$DB_query='SELECT serno,name,desc_short FROM ' . $VAL2 . ' ORDER BY serno';
$DB_result=db_query($DB_query, $DB_connect)
or die('Query failed: ' . db_error());
while ($DB_list=db_fetch_array($DB_result)) {
$output .= " <li><a href=\"/?what=admin&where=" . $VAL2 .
"&action=edit&serno=$DB_list[serno]&referer=" . urlencode("http://" .
$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']) . "\"><span
class=\"setupOverviewName\">Argh... " . $DB_list['name'] . "</span></a>";
if ($_COOKIE[$VAL2 . '_desc_short'] == 'show') {
$output .= "<dt />" . $DB_list['desc_short'];
}
$output .= "</li>\n";
}
db_free_result($DB_result);
db_close($DB_connect);
------------------------------------------------------------------------
and then I get in the Webpage something like:
----[ STDIN ]-----------------------------------------------------------
Current Main-Projects
1. Argh...
2. Argh...
3. Argh...
4. Argh...
5. Argh...
6. Argh...
7. Argh...
8. Argh...
9. Argh...
10. Argh...
Add new Project | Show short describtion
------------------------------------------------------------------------
which mean, the db_fetch_array() give the right number of entries back
since it count up to 10, but it can not get the value $DB_list['name'].
The SQL data for the this part is:
----[ '~/BACKUPS/electronica.sql']--------------------------------------
<snip>
--
-- Tabellenstruktur fÃŒr Tabelle `projects`
--
CREATE TABLE `projects` (
`serno` bigint(20) unsigned NOT NULL auto_increment,
`active` int(11) NOT NULL default '0',
`name` varchar(50) collate latin1_german2_ci NOT NULL,
`desc_short` varchar(250) collate latin1_german2_ci NOT NULL,
`desc_long` varchar(16000) collate latin1_german2_ci NOT NULL,
`sub_projects` varchar(1000) collate latin1_german2_ci default NULL,
`photos` varchar(1000) collate latin1_german2_ci default NULL,
PRIMARY KEY (`serno`),
UNIQUE KEY `serno` (`serno`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci
AUTO_INCREMENT=11 ;
--
-- Daten fÃŒr Tabelle `projects`
--
INSERT INTO `projects` VALUES (1, 0, '24V DC Modular ATX PSU', 'foo', '', '',
'');
INSERT INTO `projects` VALUES (2, 0, '24V DC Modular Solar-Wind-Charger and
Distributor', 'foo', '', '', '');
INSERT INTO `projects` VALUES (3, 0, '24V DC Multichemistry Charger', 'foo',
'', '', '');
INSERT INTO `projects` VALUES (4, 0, 'GSM Modem', 'foo', '', '', '');
INSERT INTO `projects` VALUES (5, 0, 'GSM Router', 'foo', '', '', '');
INSERT INTO `projects` VALUES (6, 0, 'Outdoor HandBag TablePC', 'foo', '', '',
'');
INSERT INTO `projects` VALUES (7, 0, 'Industrial TablePC', 'foo', '', '', '');
INSERT INTO `projects` VALUES (8, 0, 'MicroPC', 'foo', '', '', '');
INSERT INTO `projects` VALUES (9, 0, 'MicroServer', 'foo', '', '', '');
INSERT INTO `projects` VALUES (10, 0, 'USB Gadget', 'foo', '', '', '');
<snip>
------------------------------------------------------------------------
Now while checking with:
----[ '~/.tdphp-vserver/includes/10_electronica_admin.inc' ]------------
<snip>
# while ($DB_list=db_fetch_array($DB_result)) {
# $output .= " <li><a href=\"/?what=admin&where=" . $VAL2 .
"&action=edit&serno=$DB_list[serno]&referer=" . urlencode("http://" .
$_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']) . "\"><span
class=\"setupOverviewName\">Argh... " . $DB_list['name'] . "</span></a>";
# if ($_COOKIE[$VAL2 . '_desc_short'] == 'show') {
# $output .= "<dt />" . $DB_list['desc_short'];
# }
# $output .= "</li>\n";
# }
echo "<pre>\n";
while ($DB_list=db_fetch_array($DB_result)) {
print_r ($DB_list);
}
echo "</pre>\n";
exit();
<snip>
------------------------------------------------------------------------
I have gotten something this:
----[ STDIN ]-----------------------------------------------------------
Array
(
[0] => 1
[1] => 24V DC Modular ATX PSU
[2] => foo
)
Array
(
[0] => 2
[1] => 24V DC Modular Solar-Wind-Charger and Distributor
[2] => foo
)
Array
(
[0] => 3
[1] => 24V DC Multichemistry Charger
<snip>
------------------------------------------------------------------------
So, PostgreSQL catch the array by "name"
pg_fetch_array($db_query, null, PGSQL_ASSOC)
and MySQL use the "position"
mysql_fetch_array($db_query, MYSQL_NUM)
But positional values do not work, since the sequence can change...
How can I get the db_fetch_array($DB_result) to give me the name instead
the numerical position?
I need:
Array
(
[serno] => 1
[name] => 24V DC Modular ATX PSU
[desc_short] => foo
)
Can someone tell me what I have over-seen?
Note: The "database_mysql.inc" is a derived work
of my working (!!!) "database_pgsql.inc".
Thanks, Greetings and nice Day/Evening
Michelle Konzack
Systemadministrator
24V Electronic Engineer
Tamay Dogan Network
Debian GNU/Linux Consultant
--
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
<http://www.tamay-dogan.net/> <http://www.can4linux.org/>
Michelle Konzack Apt. 917 ICQ #328449886
+49/177/9351947 50, rue de Soultz MSN LinuxMichi
+33/6/61925193 67100 Strasbourg/France IRC #Debian (irc.icq.com)
signature.pgp
Description: Digital signature

