[gelöst]db_query drupal api
am 08.09.2010 - 17:45 Uhr in
Hallo,
ich komme da nicht weiter. Ich möchte eine eifache Abfrage und einen einfachen insert in die Datenbank machen. Das klappt nicht.
$result = db_query("SELECT * FROM {node_limit} WHERE uid = '$userid' and type='$type'");
$orderidalt = $result[orderid];
$limitalt = $result[limit];
db_query("UPDATE SET {node_limit} where type='$type' VALUES('%d', '%s', '%d', '%s', '%d','%d','%d')", $lid, $type, $limit, $title, $weight, $orderid, $userid);Das funktioniert aber nicht. Es ist schlichtweg falscher Code. Ich weiss nur nicht, wie ich einen sicheren Code für diese beiden Aktionen schreiben kann.
Oberes Beispiel geht nicht, da ein Array ausgelesen wird. Bin überfragt.
- Anmelden oder Registrieren um Kommentare zu schreiben

Du musst nicht nur die Query
am 08.09.2010 - 18:00 Uhr
Du musst nicht nur die Query in einer Variable speichern ($result) sondern auch die Zeilen auslesen und in einem Objekt speichern und entsprechend abrufen.
Beispiel 1:
<?php
$sql = "SELECT * FROM {node_limit} WHERE uid = %d and type='%s'";
$result = db_query($sql, $userid, $type);
$row = db_fetch_object($result);
$orderidalt = $row->orderid;
$limitalt = $row->limit;
?>
Und deine Update-Anweisung ist schlichtweg komplett falsch. Hier kannst du dir mal anschauen, wie eine Update-Anweisung aufgebaut sein muss:
http://sql.1keydata.com/de/sql-update.php
Das was du da gemacht hast ist eine seltsame Mischung aus Update und Insert.
Außerdem solltest du dir das ganze Thema nochmal ordentlich zu Gemühte führen. Sowas macht man z.B. nicht:
WHERE uid = '$userid' and type='$type'Da kommen Platzhalter hin und nicht direkt die Variablen (siehe mein Code oben).
Außerdem ist %d ein Platzhalter für Ganzzahlen, das heißt, es kommen keine Anführungszeichen drumrum.
Die Select Abfrage hat
am 08.09.2010 - 19:09 Uhr
Die Select Abfrage hat funktioniert. Vielen Dank dafür !
Beim Update tu ich mich schwer:
db_query("UPDATE {node_limit} SET ('%d', '%s', '%d', '%s', '%d','%d','%d') where type='$type'", $lid, $type, $limit, $title, $weight, $orderid, $userid);funktioniert nicht. Warum kann ich mir nicht erklären.
%d benötigt keine
am 08.09.2010 - 19:21 Uhr
%d benötigt keine Anführungszeichen!
Des Weiteren musst Du die Tabellenfelder ansprechen. Syntax für UPDATE
Hattest du meinen Beitrag
am 08.09.2010 - 19:33 Uhr
Hattest du meinen Beitrag komplett durchgelesen?
Deine Update-Syntax ist total falsch.
Eine Update-Anweisung müsste z.B. so aussehen:
UPDATE meine_tabelle SET uid=123, name="Max Mustermann", anrede="Herr" WHERE id = 12345;Sorry, war zu ungeduldig.
am 08.09.2010 - 19:39 Uhr
Sorry, war zu ungeduldig. Dein Beitrg hat mir schon weitergeholfen. Eigendlich kenne ich diese Staddadabfragen. Die Platzhalter haben mich ein wenig verunsichert. Jetzt sieht mein update so aus
db_query("UPDATE {node_limit} SET lid=%d, type='%s', limit=%d, title='%s', weight=%d, orderid=%d, uid=%d where type='%s'", $lid, $type, $limit, $title, $weight, $orderid, $userid, $type);Kann mich nur wiederholen,
am 08.09.2010 - 19:40 Uhr
Kann mich nur wiederholen, bitte die richtige Syntax anwenden, 2 Comments höher und darüber der Link zum Update Syntax!
UPDATE: So siehts besser aus!
Ist immer noch falsch. Icch
am 08.09.2010 - 20:35 Uhr
Ist immer noch falsch. Icch habe mich an die Syntax gehalten.
Welche Fehlermeldung bekommst
am 08.09.2010 - 20:51 Uhr
Welche Fehlermeldung bekommst du denn?
Ich habe den Fehler zwar
am 09.09.2010 - 12:36 Uhr
Ich habe den Fehler zwar lokalisieren können. Ich weiss aber nicht wie ich ihn beheben kann.
db_query("UPDATE {node_limit} SET limit = '%s', orderid =%d where uid = %d and type ='%s'", $limit, $orderid, $userid, $type);Die Syntax ist jetzt soweit in Ordnung. Leider ist limit ein Schlüsselwort. Ich darf es so nicht verwenden. Wenn ich die Bezeichnung in der Datenbank ändern würde, dann müsste ich das Modul aufwendig anpassen. Kann ich den oben genanten Query nicht irgendwie anders modifizieren, so dass das Ergebnis gleich bleibt aso die Datenbanktabelle mit der Bezeichnung limit angesprochen wird?
Die Syntax ist eben nicht in
am 09.09.2010 - 13:03 Uhr
Die Syntax ist eben nicht in Ordnung, wenn Du "reserved words" wie limit so verwendest. Gemäß MySQL Dokumentation mußt Du diese Begriffe quoten mit "backticks" also
db_query("UPDATE {node_limit} SET `limit` = '%s', orderid =%d where uid = %d and type ='%s'", $limit, $orderid, $userid, $type);Beste Grüße
Werner
Jetzt klappt es. Eigendlich
am 09.09.2010 - 17:18 Uhr
Jetzt klappt es. Eigendlich wusste ich das, habe aber die Backticks falsch eingegeben. Jetzt funktioniert es. Vielen Dank !
Dann setze bitte noch diesen
am 09.09.2010 - 18:05 Uhr
Dann setze bitte noch diesen Thread auf gelöst. ([gelöst] an den Anfang des ersten Titels im Thread setzen)
Beste Grüße
Werner