Avatar billede borgenviby Nybegynder
10. oktober 2006 - 11:41 Der er 15 kommentarer og
2 løsninger

problem med udtræk fra database

Kan nogen fortælle mig hvad der er galt med denne kode.:

// extracts the object_time to add the $booking_end
        $sql = "SELECT object_time FROM rs_data_objects";
        $sql .= "WHERE object_id = " . $_REQUEST["object_id"] . ";";
        $temp = db_query($database_name, $sql);
        $temp_ = fetch_array($temp);
        $ObjectTime = $temp_["object_time"];

Jeg får denne fejl: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

// tabellen
CREATE TABLE `rs_data_objects` (
  `object_id` smallint(5) unsigned NOT NULL auto_increment,
  `rand_code` smallint(5) unsigned default NULL,
  `object_name` varchar(50) collate latin1_danish_ci NOT NULL default '',
  `family_id` tinyint(3) unsigned NOT NULL default '0',
  `manager_id` int(10) unsigned NOT NULL default '0',
  `misc_info` varchar(255) collate latin1_danish_ci default NULL,
  `object_time` varchar(255) collate latin1_danish_ci NOT NULL default '',
  PRIMARY KEY  (`object_id`),
  KEY `rand_code` (`rand_code`),
  KEY `family_id` (`family_id`),
  KEY `manager_id` (`manager_id`),
  KEY `object_time` (`object_time`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1 COLLATE=latin1_danish_ci AUTO_INCREMENT=8 ;

// funktionen db_query og fetch_array

function db_query($db_name, $sql) {

        global $db_connection_type, $db_server_address, $db_user, $db_password;

        switch($db_connection_type) {
           
            case "odbc":
            $db_connection = odbc_connect($db_name, $db_user, $db_password);
            $result = odbc_exec($db_connection, $sql);
            break;

            case "mysql":
            $db_connection = mysql_connect($db_server_address, $db_user, $db_password);
            $result = mysql_db_query($db_name, $sql, $db_connection);
        }

        return $result;
    }

    function fetch_array($array) {
   
        global $db_connection_type;

        switch($db_connection_type) {

            case "odbc":
            $result = odbc_fetch_array($array);
            break;

            case "mysql":
            $result = mysql_fetch_array($array);
        }
       
        return $result;
    }
Avatar billede kinderaeg Nybegynder
10. oktober 2006 - 11:47 #1
Det ser umiddelbart ud som om du kommer til at mangle et mellemrum i din sql-sætning, mellem rs_data_objects og WHERE, prøv i med nedenstående:

$sql = "SELECT object_time FROM rs_data_objects ";
$sql .= "WHERE object_id = " . $_REQUEST["object_id"] . ";";
Avatar billede jaw Nybegynder
10. oktober 2006 - 12:07 #2
Få mysql's fejl smidt på, så det bliver:
$result = mysql_db_query($db_name, $sql, $db_connection) or die(mysql_error());
...så ser du højst sandsynligt hvor problemet er!
Avatar billede borgenviby Nybegynder
10. oktober 2006 - 13:40 #3
Ok. har sat or die på $result. Det giver denne fejlmed.:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';WHERE rs_data_objects.object_time =' at line 1
Avatar billede jaw Nybegynder
10. oktober 2006 - 14:11 #4
Det udtræk kan jeg slet ikke finde i dit ovenstående paste, men det ser ud til, at du har noget a'la:

SELECT noget FROM tabel; WHERE ...

Altså at du har et ; (semikolon) et sted, hvor det bestemt ikke skal være.
Avatar billede borgenviby Nybegynder
10. oktober 2006 - 15:36 #5
Ok. Har fjernet ; og nu kommer jeg da lidt længere i scriptet. : ) Men den vil ikke acceptere følgende :

$sql .= "WHERE object_id = " . $_REQUEST["object_id"] . ";";

Det giver en ny fejl.: Parse error: syntax error, unexpected T_VARIABLE

$_REQUEST["object_id"] skulle gerne hente "object_id" fra min form :

<form>
<table>
<td style="font-weight:bold; text-align:left;"><?php echo "Vælg behandling"; ?> :</td>
<td><select id="object_id" name="object_id"><?php echo $objects_list; ?></select></td>
</tr>
</table>
</form>
Avatar billede jaw Nybegynder
10. oktober 2006 - 15:43 #6
Den parse error tror jeg ikke stammer fra den linie. Hvad har du på linien før? Og er du sikker på, at det er det linienummer, som fejlen beskriver? (Den skriver altid hvilken linie, der er fejl på).
Avatar billede kinderaeg Nybegynder
10. oktober 2006 - 15:47 #7
Det ser/så ud til, at du havde noget i retning af:
$sql = "SELECT object_time FROM rs_data_objects; ";
$sql .= "WHERE object_id = " . $_REQUEST["object_id"] . ";";
Og din nye fejl tyder på, at du har fjernet det forkerte ;
Lav din sql-sætning som jeg skrev tidligere eller forsøg evt i en linie, så slipper du for at sætte et ; ind som stop for første linie:
$sql = "SELECT object_time FROM rs_data_objects WHERE object_id = " . $_REQUEST["object_id"] . ";";
Avatar billede borgenviby Nybegynder
10. oktober 2006 - 16:10 #8
Har rettet mellemrummet i $sql, men den siger stadig :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';WHERE rs_data_objects.object_time =' at line 1


$sql = "SELECT object_time FROM rs_data_objects ";
$sql .= "WHERE object_id = " . $_REQUEST["object_id"] . ";";
$temp = db_query($database_name, $sql);
$temp_ = fetch_array($temp);
$ObjectTime = $temp_["object_time"];

Forstår det ikke. Det er i dette script fejlen ligger. Har man ændret på sproget siden den skriver : WHERE rs_data_objects.object_time =
Avatar billede kinderaeg Nybegynder
11. oktober 2006 - 09:06 #9
Har lidt svært ved at forstå den siger du har fejl i linie 1, hvis du siger at det er der hvor du sætter select-delen af din sql, for det er jo ikke det den fortæller i fejlmeddelelsen, der siger den jo, at fejlen har at gøre med din sql-syntax. Din streng bliver først til sql-syntax når du sender den til databasen i linie 3. Desuden ser det også ud til, at du har en fejl i din request, da der ikke lader til at være en værdi med.
Har du forsøgt med jaw's forslag med at sætte en "or die" på din forespørgsel? Du kan evt skrive sql'en ud sammen med ("or die(mysql_error()."\n".$sql)"), så du kan se, hvordan den endelige sql du førsøger at køre, ser ud.
Avatar billede borgenviby Nybegynder
11. oktober 2006 - 09:26 #10
Fejlen må ligge i det script. Hvis jeg fjerner dette script fungere resten af scriptet. Jeg prøver at ændre i Openbookings som er et opensource program. www.openbookings.org

Men mit problem er stadig at jeg ikke forstår hvorfor jeg ikke kan lave det udtræk fra databasen med det script.

$REQUEST["object_id"] skulle jo gerne give en værdi fra min form. Er problemet at scriptet lægger forkert i forhold til min form, kan det give et tomt felt i forhold til $REQUEST["object_id"]

Eller sagt på en anden måde.: Hvordan laver jeg ellers et udtræk fra min database hvor 'object_time' er afhængig af et valg fra formen?
Avatar billede kinderaeg Nybegynder
11. oktober 2006 - 09:42 #11
Nu er jeg generelt ikke så meget for $_REQUEST, sætter altid en method på mine forms, og bruger så $_GET eller $_POST, men der burde nu ikke være nogen forskel.

Du kan jo evt sætte en die($sql); ind lige efter du har sat din sql-sætning sammen, altså før $temp = db_query($database_name, $sql); og se, om sætningen ser rigtig ud, og kan køres direkte fra din database
Avatar billede jaw Nybegynder
11. oktober 2006 - 11:49 #12
Har du prøvet, efter $sql, at udskrive $sql og se, hvordan den ser ud? Prøv det lige, og paste det herind.

$sql .= "WHERE.......";
echo $sql."<br />";
Avatar billede borgenviby Nybegynder
13. oktober 2006 - 10:00 #13
Har fundet løsningen. Endelig...

// Gets the object_time from object_id
    $sql  = "SELECT rs_param_families.family_name, rs_data_objects.object_time ";
    $sql .= "FROM rs_data_objects INNER JOIN rs_param_families ON rs_data_objects.family_id = rs_param_families.family_id ";
    $sql .= "WHERE rs_data_objects.object_id = " . $_REQUEST["object_id"] . ";";
    $temp = db_query($database_name, $sql); $temp_ = fetch_array($temp);
    $object_time = $temp_["object_time"];
Avatar billede jaw Nybegynder
13. oktober 2006 - 11:32 #14
Og hvad var problemet så? Og er der nogen, som skal have points?
Avatar billede borgenviby Nybegynder
14. oktober 2006 - 11:33 #15
I må godt dele pointene. jaw smid lige en svar så jeg kan give jer begge point : )
Avatar billede jaw Nybegynder
14. oktober 2006 - 11:39 #16
Okey, så pyt og tak da :)
Avatar billede borgenviby Nybegynder
14. oktober 2006 - 13:01 #17
Håber i er klar en anden gang ; )

Go weekend
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester