| 

.NET C# Java Javascript Exception

3
Guten Morgen!

vielleicht könnt Ihr mir hier weiter helfen, finde leider keine Lösung, möchte MySQLi bind_param() ein Array übergeben. Also meine Frage ist wie kann ich ein Array in die bind_param() Syntax einbinden??? Hab leider nicht dazu im Web gefunden!



$platzhalter = "?,?,?";//Fuer statische Variablen angepasst
$daten_typ = "sss";//Fuer statische Datentypen angepasst

for($i=1; $i<$count_feldname; $i++){
// "?" als Platzhalter (wieviele Eintraege werden es sein, jedes ? steht fuer einen Eintrag!)
$platzhalter .= ",?";//werden hier dynamisch erzeugt, je nach Bedarf!

//Datentyp "s" fuer String
$daten_typ .= "s";//wird hier dynamisch erzeugt, je nach Bedarf!
}


$insert = "INSERT INTO `katalog` (".$fldname.") VALUES (".$platzhalter.")";
$eintrag = $mysqli->prepare($insert);

foreach($content[1] as $key => $value[]){}
$eintrag->bind_param($daten_typ,$referenznummer,$modell_name,$value[0],$value[1],$value[2],$value[3],$value[4],$value[5],$value[6]);
$eintrag->execute();
//Dieser Code funktioniert so mit dem $value[0]-$value[6], also mit Variablen und durch Kommata getrennt! Aber nicht mit einem Array!



/*
$daten_typ //wird dynamisch zu $value[] angepasst
$referenznummer,$modell_name //bleiben unverändert
$value[] //dynamisch angepasst, die Anzahl kann stark variieren!!
*/


//So bräuchte ich den Code:
foreach($content[1] as $key => $value[]){}
$content = $value //z.B. $value[0] bis $value[6];

oder

//Array wird in einen String umgewandelt und der Inhalt mit einem Separator getrennt!
$content = implode("','", $content[1]);


//In die DB eintragen!
$eintrag->bind_param($daten_typ,$referenznummer,$modell_name,$content);
$eintrag->execute();

// Pruefen ob der Eintrag efolgreich war
if ($eintrag->affected_rows == 1){
echo 'Der neue Eintrage wurde hinzugefuegt.';
}
else{
$fehler .= 'Der MySQL-Eintrag konnte nicht hinzugefuegt werden (vielleicht existiert er schon, gleiche Referenznummer?)!';
}

DANKE für EURE Hilfe!

LG,

Mario
10.01.2014
Mario 11 1 2
Mario 11 1 2
Hallo Mario, aus deinem Code-Beispiel werde ich grad nicht schlau. Kannst du mal die Tabellen-Struktur ergänzen? Und ggf. auch einen Beispiel-Datensatz aus deinem Dokument?
phg 11.01.2014
2 Antworten
0
Ich würde jetzt sagen: gar nicht!

Welchen Sinn sollte das auch machen? An welche Felder sollten denn die einzelnen Elemente des Arrays gebunden werden? Du kannst nur einen "Wert" an ein Feld /Parameter übergeben.
10.01.2014
Xantiva 2,3k 2 9
0
Danke für die rasche Antwort!


Welchen Sinn sollte das auch machen?

Für mich:
ca. 8.000 Modell-Beschreibungen und mehr, nicht von Hand einzutragen. Die Beschreibung wird so aus einem Dokument ausgelesen und dem Modell zugeordnet durch die RefNr. Diese Prozedur dauert automatisiert ein paar Minuten, von Hand einige Monate. Mir fehlt die Zeit dazu ;-|

Vom Code her:
Betreffend der alten MySQL-Funktionen auf MySQLi umzustellen.



An welche Felder sollten denn die einzelnen Elemente des Arrays gebunden werden?

1.Feldname mit Element aus $value[0]
2.Feldname mit Element aus $value[1]
3.Feldname mit Element aus $value[2] u.s.w.

Meine Frage ist eigentlich wie ich aus einem Array die Bindung zu Feldnamen und Element syntaktisch herstellen kann! Wenn die Bindung von Feldname mit dem Element aus dem Array nicht syntaktisch richtig ist, bricht bind_param() mit einem Fehler ab.


Du kannst nur einen "Wert" an ein Feld /Parameter übergeben
so soll es auch sein, aber wie oben beschrieben aus einem Array.

LG,

Mario
10.01.2014
Mario 11 1 2
Das war das, was ich meinte: Die Datenbank erwartet explizit den Feldnamen im SQL String. Es wird nicht "durchgezählt": 1. Feld, 2. Feld, ...
Stell Dir vor, jemand jemand fügt in der Tabelle an der 2. Stelle ein neues Feld ein. Dann stimmt die "Numerierung" ja nicht mehr.

Du könntest mal folgendes testen: Lies aus der Tabelle die Feldnamen aus. Packe diese in ein Array. Dann baust Du mit den echten Feldnamen aus dem Array Deinen SQL String.
Xantiva 13.01.2014

Stelle deine Array-Frage jetzt!