Probleem met datbase naam met - er in
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)
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
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>";
$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
* 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.
escape het - teken
Nooit een - (minteken) in een naam van een tabel of veld gebruiken. SQL denkt dan dat het een aftrekking is. Gebruik een underscore _.
"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) ;
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?
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 -
Gezien alle reactie denk ik dat ik het hosting bedrijf moet vragen de databasenaam te wijzigen.
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.
Gezien alle reactie denk ik dat ik het hosting bedrijf moet vragen de databasenaam te wijzigen.
Een zeer verstandig besluit.