dedlfix: mysqli : Überprüfen, dann abfragen

Beitrag lesen

Hi!

Ein Beispiel wäre jmd soll seinen namen eingeben und das Land in dem er wohnt. Nur muss das Land was er eingibt in einer Tabelle(Relation) Länder stehen(diese widerum von Benutzern gefüllt wird).

Die Bedingung heißt doch aber wohl, Land _und_ Name dürfen nicht doppelt vorkommen, Land und AndererName ist aber gestattet, oder? Dann kommt ein Unique-Index auf das Feld für das Land in der Ländertabelle. Desweiteren musst du ja irgendwo Land (oder ein Verweis darauf) und Name in zusammen einer zweiten Tabelle stehen haben. Dann leg auch noch einen Unique Index über diese beiden Felder.

Nun gibt der Benutzer z.B Deutschland ein. Ich muss überprüfen ob Deutschland in Länder drin steht. Wenn ja ist alles ok sein Name wird hinzugefügt(in Tabelle Person) , wenn nein gibt es einen Fehler aus.

Hmm, das jetzt liest sich für mich so, dass nur die in der Ländertabelle stehenden Länder vom Benutzer eingegeben werden dürfen - und zwar zu Fuß, ohne sie aus einer vorgegebenen Liste auswählen zu dürfen. Und wenn das Land nicht vorkommt, darf der Name gar nicht gespeichert werden. Oder war deine Beschreibung ein Ist-Zustand, wie du ihn gern nicht hättest?

Das Problem was ich grundstzl habe(ich finde kein gescheites Tutorial), das ich wenn ich diese bin_param mache, ja das SQL Statemant vollständig ist. Aber wie kann ich dieses nun auswerten(Abfragen ob Werte enstehen, wenn ja diese Ausgeben).

Nach dem Binden kommt ein Execute. Erst dieses führt das Statement aus. Dann bindest du die Ergebnisspalten an weitere Variablen und führst fetch() aus, nach jedem dieser fetch()-Aufrufe stehen in den an das Ergebnis gebundenen Variablen die Werte der einzelnen Ergebnismengen-Datensätze. Anwendungsbeispiele finden sich im PHP-Handbuch unter anderem bei mysqli::prepare(), mysqli_stmt::execute() und mysqli_stmt::fetch(). Tutorials kenne ich keine, aber wenn du was daran nicht verstehst, frag konkret nach!

Mit den Fehlermedlungen.
Bei MySql haben ich immer " echo mysql_error() "nach " mysql_query($sql); " angegeben das hat mir immer suer geholfen. Aber wie du sagst " Die Methode query() erwartet einen SQL-Statement-String und kein Prepared Statement." da scheint ja bereits mein fehler zu sein.

Ja, auch für mysqli::query() gibt es mindestens ein Anwendungsbeispiel im Handbuch. Außerdem verrät das Handbuch, wenn man genau hinsieht, dass mysqli::query() als Parameter einen String haben möchte und mysqli::prepare() aber ein mysqli_stmt zurückliefert. Da kann was nicht zusammenpassen. Obendrein beschwert sich PHP in dem Fall doch recht deutlich mit

Warning:  mysqli::query() expects parameter 1 to be string, object given in ...

Wenn du diese Meldung nicht gesehen hast, prüfe die bereits genannten Einstellungen zum error_reporting auf deiner Entwicklungsmaschine!

Wie man die MySQL-Fehlermeldungen unter mysqli abfragt, ist auch in den Beispielen des Handbuchs zu sehen (teilweise jedenfalls). Ansonsten such dir in der Funktionsübersicht zu mysqli die Funktionen mit error im Namen oder der Beschreibung und lies deren Beschreibung. (Am besten die englische Fassung, die deutsche ist nicht immer fehlerfrei/eindeutig übersetzt. Zumindest solltest du (vor allem die Beispiele) mit der englischen Fassung vergleichen.)

Lo!