Das leid mit PHP und MySQL

Old_Pirate

Stammuser
Hallo Hackerboard !

Puhh ich bin hier echt am verzweifeln.
Also ich habe auf einem Raspberry auf dem Rasbian läuft PHP5 und MySQL mit Phpmyadmin installiert. Läuft alles wunderbar ich kann auch über PHPmyadmin Datenbanken anlegen etc.

Nun Habe ich mir ein PHP Script geschrieben dieses soll eigentlich nur einen INSERT in eine Testdatenbank machen.

PHP:
<?php
echo "Test";
$servername = "localhost";
$username ="root";
$password="something";
$dbname="test";echo "test";

$db = mysqli_connect($servername,$username,$password,$dbname);
if(mysqli_connect_errno()){        
printf("Verbindung fehlgeschlagen: %s\n",mysqli_connect_error());        
exit();}
$query ="INSERT INTO tabltest(title) VALUES('Hallo Welt')";
$db->query($query);
printf("New Record has id %d.\n" ,$db->insert-id);
echo "close";
mysqli_close($db);
?>
Das script läuft ohne Fehler ausgabe durch. Ebenso bekomme ich laut dem Firefoxdebugger ein 200 OK vom Server zurück.
Jedoch bleibt meine Datenbank leer... es wird einfach kein Insert durchgeführt. Das gleiche habe ich bereits auch mit PDO probiert selbes Ergebnis.

Hat jemand eine Idee woran das liegen kann ?

Vielen Dank schonmal im Vorraus
 

bitmuncher

Moderator
Prüfe einfach mal, ob mysql_errno gesetzt ist und wenn ja, was mysql_error() dir ausgibt. MySQL-Fehler werden nämlich nicht einfach ausgegeben und müssen exlizit geprüft und abgerufen werden.
 

Old_Pirate

Stammuser
Danke xeno und bitmuncher für die Antworten.

öhmm jaaa also sehr komisch aber nachdem ich gerade versucht habe bitmunchers Vorschlag umzusetzen hat es plötzlich funktioniert ???
Ernsthaft, plötzlich funktioniert es wie von gestierhand ich habe lediglich folgendes hinzugefügt.

PHP:
if(mysqli_errno()){       
echo mysqli_errno($db). ":" .mysqli_error($db). "\n";}
ich habe nachdem ich festgestellt habe das plötzlich funktioniert das hinzugefügte wieder auskommentiert ... Es funktioniert immernoch !?
Also daran kann es ja nicht liegen ?

Das ist echt komisch ich habe heute wirklich den gesamten Nachmittag damit verbracht, zu versuchen herauszufinden warum das nicht funktioniert... Datenbank komplett gelöscht neue erstellt. Das Script mit PDO getestet nichts, nachdem Problem gegoogelt usw....

echt seltsam! :confused::confused::confused:

Also auch wenn es jetzt anscheinend funktioniert kann sich jemand einen Reim darauf machen ? Das würde mich ja jetzt schon interessieren... immerhin hat sich nichts geändert seit ich den Post erstellt habe..

@xeno title ist tatsächlich ein typo aber der ist zum glück auch in der DB :) daran liegt es also nicht
 
Zuletzt bearbeitet:

Chakky

Member of Honour
Jetzt Rätselraten bringt nix, schau dir die Logfiles an....

ich vermute ein rechte Problem :)
 

Old_Pirate

Stammuser
Also nachdem ich mich jetzt mit dem Problem weiter beschäftigt habe kann ich sagen es ist kein Rechte Problem.

Aufgefallen ist mir aber folgendes:
Ich möchte beispielsweiße einen Insert in die Tabelle tblort machen. Angenommen diese Tabelle hat nun folgende Spalten.

ort_id : (primary key),typ int, Auto_Increment
postal_code : VARCHAR länge 10
orts_name : VARCHAR länge 255

Ich bekomme an den Server ein JSONArray geschickt in dem alle Daten vorhanden sind.
Der INSERT sieht folgendermaßen aus.

PHP:
$query ="INSERT INTO tblort(postal_code,orts_name)VALUES($postal_code,$city)";$db->query($query);
Ok in den Variablen $postal_code und $city stehen natürlich die Werte die ich in die Tabelle schreiben möchte.
Mit diesem INSERT kommt jedoch nichts an. Die Tabelle tblort bleibt leer.
Ich habe nun schon mehrfach die übergebenen Variablen überprüft, in den Variablen steht genau der Wert drin den ich haben möchte.

Schreibe ich den INSERT jedoch so:

PHP:
$query ="INSERT INTO tblort(postal_code,orts_name)VALUES($postal_code,'Berlin')";$db->query($query);
Funktioniert es und es wird etwas in die Tabelle tblort eingetragen. Auch wenn ich versuche nur postal_code einzufügen funktioniert es.
Ich habe nun vermutet das $city nicht vom typ String ist ... ich hab mir nun mit
gettype den Datentyp ausgeben lassen:
PHP:
echo gettype($city);
Dies ergab aber das $city vom Typ String ist, wie es sein sollte.
Einen SQL Fehler mit:
PHP:
if($mysqli->error ){        echo "Errormessage: %s\n" . $mysqli->error . "\n";}
bekomme ich aber nicht.

Also zusammenfassend:
es kann ausgeschlossen werden dass:
1. Die Variablen $postal_code und $city leer sind
2. Es kann ausgeschlossen werden das $postal_code und $city vom falschen typ sind.
3. Es kann ausgeschlossen werden das ein Tabellen oder Spaltenname falsch geschrieben ist, da es ja funktioniert wenn ich den Stadtnamen wie gezeigt direkt eintrage oder den parameter $city weglasse.

Ich verstehe es einfach nicht!:confused::confused::confused:

Hat vielleicht jemand eine Idee oder vermutung an was das liegen kann ? Ich bin echt am Ende mit meinem Latein.

Danke nochmals im Vorraus!
 

bitmuncher

Moderator
Da $city vermutlich ein String/VARCHAR ist, musst du dort einfache Anführungszeichen für das INSERT einsetzen.

Code:
$query ="INSERT INTO tblort(postal_code,orts_name)VALUES(".$postal_code.",'".$city."')";
 

Old_Pirate

Stammuser
Ja du hast recht das hilft wirklich :)
Allerdings verstehe ich nicht warum ? ^^
Also $postal_code ist ja auch vom typ string das funktioniert ohne Probleme ?
 

bitmuncher

Moderator
MySQL kann bestimmte Werte automatisch Typecasten (z.B. Zahlen zu Strings). Dabei werden dann die Anführungsstriche quasi automatisch "gesetzt". Wenn man allerdings einen String einfügt, muss und sollte man diesen mit den Anführungszeichen auch entsprechend kennzeichnen. Das kann sonst sehr seltsame Nebeneffekte haben.
 
Oben