Probleem met datbase naam met - er in

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ellen P

Ellen P

21/01/2011 16:51:24
Quote Anchor link
Ik zit met een databasenaam die een gegeven is : medical-3

Ik zit met een raadsel. Ik werk op een php testserver en op een internet server.
Nu wil ik wat records via een formulier laten wegschrijven in een database. Nu krijg ik dat op mijn testserver wel voor elkaar.
maar hetzelfde programma wil niet werken op internet. Ik wet even niet meer waar ik de oplossing voor dit probleem moet zoeken.

Ik heb een testprogrammaatje hieronder. Dat voegt op de testserver netjes een record toe. Op de testserver heet de database trouwens anders, namelijk test. Op internet heb ik dezelfde tabel aangemaakt.
De bovenste 4 gegevens heb ik aangepast. Op zich gaat connecten goed. Ook het weergeven van records, onderaan dit script wordt uitgevoerd.
Maar het toevoegen van records niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  $database ="medical-3";
    $mysqlhost ="localhost";
    $mysqluser="...";
    $mysqlww="...";
  
    $db = mysql_connect($mysqlhost , $mysqluser, $mysqlww) or die("Kan niet verbinden: ".mysql_error());
  
    mysql_select_db($database,$db) ;
  
    $sql = "INSERT INTO $database.testen2 (naam1, naam2, naam3) VALUES ('NAAM-1','NAAM-2','NAAM-3')";


    if (!mysql_query($sql) )  {
            echo "Gegevens toevoegen mislukt";
            echo "<br>";
        } else {
            echo "<br/>Nieuwe gegeven toegevoegd";  
        }

    $sql = "SELECT * FROM testen2" ;
    $resultaat = mysql_query($sql);
    echo "<table width=\"380\">";
    while ($rij = mysql_fetch_array($resultaat)) {
        echo "<tr>";
        echo  "<td>".$rij['naam1']."</td>";
        echo  "<td>".$rij['naam2']."</td>";
        echo  "<td>".$rij['naam3']."</td>";      
        echo "</tr>";  
    }  
    mysql_close($db);
    echo "</table>";


De uitvoer die ik krijg is :

Gegevens toevoegen mislukt
handmatig1 handmatig2 handmatig3


en de regel met handmatig1 2 en 3 heb ik in phpmyadmin handmatig ingegeven.

Dit werkt WEL via SQL schermpje in phpmyadmin :
INSERT INTO testen2 (naam1, naam2, naam3) VALUES ('NAAM-1','NAAM-2','NAAM-3')

DIT WERKT NIET :
INSERT INTO medical-3.testen2 (naam1, naam2, naam3) VALUES ('NAAM-1','NAAM-2','NAAM-3')

Ik denk dus dat het iets met de naam medical-3 te maken heeft. Kan hij problemen hebben met het - teken?
Zou ik dat in SQL moeten escapen? hoe escape ik dat in SQL?

Foutmelding : 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 '-3.testen2 (naam1, naam2, naam3) VALUES (\'NAAM-1\',\'NAAM-2\',\'NAAM-3\')' at line 1

het lijkt alsof hij over de naam van de database : medical-3 valt. Ik dacht ik moet escapen. Daarom heb ik de SQL regel zo gemaakt :
$sql = mysql_real_escape_string("INSERT INTO $database.testen2 (naam1, naam2, naam3) VALUES ('NAAM-1','NAAM-2','NAAM-3')");

Maar dat loste het probleem niet op. Hoe doe ik dat wel? Of wordt dit probleem door iets anders veroorzaakt?

Toevoeging op 21/01/2011 16:51:57:
Gewijzigd op 22/01/2011 11:47:19 door Ellen P
 
PHP hulp

PHP hulp

23/04/2024 16:22:38
 
TJVB tvb

TJVB tvb

21/01/2011 17:14:10
Quote Anchor link
* Haal je user/pass uit je post
* Zet je variabelen buiten quotes

$sql = "INSERT INTO ". $database .".testen2 (naam1, naam2, naam3) VALUES ('NAAM-1','NAAM-2','NAAM-3')";

Haal die - uit je database naam. Dat is geen goedgekeurd teken, daarnaast vraag ik mij af of je meerdere databases gebruikt anders heb je $database.testen2 niet nodig en is testen2 genoeg. Maar ook dan, haal die - uit je database naam.
 
Paul R

Paul R

21/01/2011 17:31:48
Quote Anchor link
escape het - teken
 
- SanThe -

- SanThe -

21/01/2011 17:40:48
Quote Anchor link
Nooit een - (minteken) in een naam van een tabel of veld gebruiken. SQL denkt dan dat het een aftrekking is. Gebruik een underscore _.
 
Aad B

Aad B

21/01/2011 20:06:26
Quote Anchor link
Oplossing is dus om de database-naam weg te laten uit je insert statement.
"INSERT INTO testen2 (naam1, naam2, naam3) VALUES ('NAAM-1','NAAM-2','NAAM-3')";
Je hebt immers al een connect naar de juiste db met: mysql_select_db($database,$db) ;
 
Ellen P

Ellen P

22/01/2011 11:33:23
Quote Anchor link
Hartelijk bedankt voor het meedenken, en het weghalen van user en wachtwoord. Hoewel het voorbeeld testgegevens betrof, zou ik natuurlijk ze wel per abuis kunnen hebben laten staan.
Het rare is dat het databasenamen zijn die gegeven worden vanuit het hosting bedrijf. Standaard krijg je 3 databases. En die krijgen dan vooraf een naam met een - en en nummer.
Het rare is dat op 1 van dergelijke databases Joomla draait zonder problemen. Dus die heeft geen probleem met het - teken er tussen. Is voor zover ik weet toch ook een PHP-site.

Hoe zou ik een - teken moeten escapen? dat heb ik geprobeerd met mysql_real_escape_string. Maar dat loste niets op. Wanneer ik bij MySQL zoek krijg ik de indruk dat je een - teken niet kunt escapen. Weet iemand of je - kunt escapen?
 
- SanThe -

- SanThe -

22/01/2011 12:35:43
Quote Anchor link
Het KAN wel, maar het is zeker niet aan te bevelen.
Dan zal je de backtics moeten gebruiken.
INSERT INTO `medical-3.testen2` .......

Of misschien zelfs zo
INSERT INTO `medical-3`.testen2 .......
Gewijzigd op 22/01/2011 12:36:57 door - SanThe -
 
Ellen P

Ellen P

22/01/2011 12:40:16
Quote Anchor link
Bedankt San The,
Gezien alle reactie denk ik dat ik het hosting bedrijf moet vragen de databasenaam te wijzigen.
 
TJVB tvb

TJVB tvb

22/01/2011 12:56:55
Quote Anchor link
Ellen P op 22/01/2011 12:40:16:
Bedankt San The,
Gezien alle reactie denk ik dat ik het hosting bedrijf moet vragen de databasenaam te wijzigen.


Een zeer verstandig besluit.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.