Speichern funktioniert nicht
cutenigi
- php
Hallo miteinander
mssql2000 und php4.
Habe folgenden Code:
function getsaveres($sn,$zahl) {
if($this->write) {
$qsn= $sn+$zahl;
for($i=$sn+1;$i<$qsn+1;$i++) {
echo $i;
$query .= "INSERT INTO tblhistorie (Serienummer, Spezielles) VALUES ($i, 9)";
}
$this->errMsg = odbc_errormsg($this->db);
if($result) return true;
else return false;
}
$this->errMsg = "keine schreibe rechte";
return false;
}
In die Fore Schleife geht er, aber leider funkt die Speicherung nicht!
Wenn ich die Insertanweisung im SQL selber versuche, dann geht sie!
Kann mir jemand sagen warum es nicht geht??
Gruss
Martin
Du hast zwei Probleme:
1.) hängst du falsch zusammen
bei dir sieht query ungefähr so aus
INSERT INTO tb (s1, s2) VALUES (1,2)INSERT INTO ...
2.) führst du die query nicht aus
kleines beispiel
$server = "localhost";
$login = "Jeder";
$pass = "auch";
$verbindung = mysql_connect($server,$login,$pass);
$abfrage = "select * from tabelle";
$erg = mysql_db_query($dbname,$abfrage,$verbindung);
usw.
Die verbindung zur Db stelle ich hier her:
function SQL($userid,$user_module,$dsn,$user,$pass) {
$this->db = odbc_connect($dsn,$user,$pass);
$this->rights = $user_module['name'];
$this->read = $user_module['read']==1?true:false;
$this->write = $user_module['write']==1?true:false;
$this->change = $user_module['change']==1?true:false;
$this->user = $userid;
}
zum speichern führe ich normalerweise solch ähnlichen Code aus:
if($sql->setNewUnbefuellt($Trode)) {
$errorMsg = "<DIV class='ok'>{$_LANG['formular wurde gespeichert']}</DIV>";
unset($Trode);unset ($el_t); unset ($el_m);unset ($el_j);
$error = false;
}
else {
$Trode['Serienummer'] = $actdat['id'];
$errorMsg = "<DIV class='error'>{$_LANG['fehler']}: " . $_LANG[$sql->errMsg] . "</DIV>";
}
mit diesem Code gehe ich dann zur Funktion, die so ist:
function setNewUnbefuellt($Trode) {
if($this->write==true) {
$query = "INSERT INTO tblhistorie (";
$keys = array_keys($Trode);
for($i=0;$i<count($keys);$i++) {
$query .= "[" . $keys[$i] . "], ";
}
$query .= "Ausgangsuser, Ausgangsdatum) VALUES (";
for($i=0;$i<count($keys);$i++) {
if($keys[$i]=='Bemerkungen' || $keys[$i]=='Ellipsoid1' || $keys[$i]=='Artikelnummer' || $keys[$i]=='Spezielles' )
$query .= "'" . $Trode[$keys[$i]] . "', ";
else
$query .= $Trode[$keys[$i]] . ", ";
}
// $query .= $this->user . ", '" . date("Y-d-m",time()) . "')"; //ISO
$query .= $this->user . ", '" . date("Y-m-d",time()) . "')"; //USA
$result = odbc_exec($this->db, $query) or die("Query failed");
return true;
}
else {
$this->errMsg = "keine schreib rechte für diesen user";
return false;
}
}
Aber alles was ich jetz in diese Hinsicht mache, funkt nicht!
gruss
Martin
Servus,
Ergänzend zu Armins Posting:
Du kannst nicht mehrere Statements in einer Query (also *_query('INSERT ...; INSERT ...; [etc.]')) absetzen. (Das "geht" zwar in den meisten Datenbank-Frontends, aber nur, weil dort die Query intern zerpflueckt und die Statements einzeln abgesetzt werden.)
Abgesehen davon ist es eh hochgradig unperformant, Daten der selben Struktur einzeln einzufügen. Besser so:
INSERT INTO tblhistorie
(Serienummer, Spezielles)
VALUES (
(1, 9),
(2, 9)
[,etc]
);
Gruss
Patrick
Servus,
da ist ein Klammern-Pärchen zu viel reingerutscht ;) So sollte es lauten:
VALUES
(1, 9),
(2, 9)
[,etc]
;
Gruss
Patrick
Geht das auch, wenn ich mit jeder einzelnen Query eine Zeile füllen muss?
gruss Martin
Servus,
(1, 9),
(2, 9)
[,etc]
Geht das auch, wenn ich mit jeder einzelnen Query eine Zeile füllen muss?
Jede Zeile im obigen Auszug des Statements entspricht einem Datensatz (also einer "Zeile" in der Datenbank).
Gruss
Patrick
also müsste ich für jede Zeile, eine (1,9) etc setzen.
Da aber über Zahl definiert wird, wieviel dass es sind, kann ich ja nicht einfach, bis 10 machen, es könnten ja auch 20 oder nur 5 sein!
und schau mal meine bisherige Vorgehensweise an, vielleicht, finden wir ja auch da eine Lösung!
gruss Martin
Servus,
was hindert dich daran, nur diesen Teil des Statements mit einer Schleife zu erzeugen?
Gruss
Patrick