Antwort
 
Themen-Optionen Thema durchsuchen
Alt 07.08.2007, 13:23 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 07.08.2007
Beiträge: 2
Standard [MYSQL] Insert wird nicht sofort ausgeführt

hallo zusammen,

ich hab zur zeit ein kleines prob und komme irgendwie nicht wirklich weiter. ich bastle gerade an einer streaming-funktion für ein chatsystem.

kurzbeschreibung:
eine tabelle wird ständig ausgelesen (in einer while(!connection_aborted)-schleife.

zeitgleich sollen von anderen webinterfaces einträge in die gleiche tabelle gemacht werden (chat-inputs).

solange der stream läuft werden die inputs aber nicht der tabelle hinzugefügt. erst nach verlassen des streams und erneutem aufruf sind die bisher (scheinbar gepufferten) inserts sichtbar.

kann ich dieses gepufferte inserten irgendwie umgehen? edit: es liegt nicht am insert query (also mysql_query_unbuffered hat keine auswirkung)

hier ein codesnip vom stream und vom input:

PHP-Code:
function Stream(){
    
$db = new db_local;
    
$query0 sprintf("SELECT msg_id FROM chat_roommessage WHERE room_id = %d ORDER BY msg_id DESC LIMIT 1"$_SESSION['user']['room']);
    
$db->query($query0);
    
$lastpos $db->result();
    while(!
connection_aborted()){
        
$db->query($query0);
        
$pos $db->result();
        if(
$lastpos $pos){
            
$db->query(sprintf("SELECT message FROM chat_roommessage WHERE room_id = %d AND msg_id > %d"$_SESSION['user']['room'], $lastpos));
            while(
$db->next_record()){
                
$text stripslashes($db->record['message']);
                echo 
$text."<br>";
                
$lastpos $pos;
            }
        }else{
            echo 
" ";
        }
        
usleep(250000);
    }
}

---

input (andere datei) :
$db2 = new db_local;
$db2->query(sprintf("INSERT INTO chat_roommessage (room_id, user_id, date, message) VALUES (%d, %d, NOW(), '%s')"$_SESSION['user']['room'], $_user['aid'], $msg));
$db2->close(); 

Geändert von pen2010 (07.08.2007 um 14:22 Uhr)
pen2010 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.08.2007, 13:27 Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von Bleistift
 
Registriert seit: 31.12.2006
Ort: Zürich
Beiträge: 306
Standard

Ich gehe jetzt einfach mal davon aus, dass du von PHP redest. Dann könnte nämlich ein Blick in das PHP-Manual nicht schaden:
http://ch2.php.net/manual/en/functio...ered-query.php
(Womöglich hab ich dich aber auch falsch verstanden, denn Queries werden immer sofort an die DB gesendet )
__________________
. <-- This is Punkt. Copy Punkt into your signature to help him on his way to world domination.
Bleistift ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.08.2007, 13:52 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 07.08.2007
Beiträge: 2
Standard

sry hatte mich wohl falsch ausgedrückt - nein am insert-query (oder der art) kanns eigentlich nicht liegen da beide varianten gleichsam warten bis das streaming beendet wird...
pen2010 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.08.2007, 16:39 Nach oben    #4
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

mögliche Ursache 1. Die Insert.
Wie hast du das verifiziert? Beispielsweise parallel per Kommandozeile oder phpMyAdmin oder oder oder ebenfalls mal einen Query abgesetzt?

mögliche Ursache 2. Das Auslesen klappt nicht.
Wie hast du das verifiziert (siehe 1.)?

Lange Rede kurzer Sinn: Mit einer normalen Datenbank klappt das problemlos (normal deswegen um Klugscheißern wg. Transaktionsverhalten u.ä. vorzubeugen *g*).
Ich gucke mal in meine Kristallkugel und sage, dass alles korrekt funktioniert, es aber ein HTTP-typisches Problem gibt, entweder aufgrund eines vorzeitigen Abbruchs deines Scriptes (das ja potentiell endlos laufen soll) oder durch Puffer-Verhalten (PHP-Manual, Methode flush).

P.S.: Lerne die Verwendung von MIN() bzw. MAX() in Hinblick auf deinen ersten Query ($query0)
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.08.2007, 21:27 Nach oben    #5
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.378
Standard

mysql_error
Man sollte beo kritischen Anwendungen immer mysql_error() verwenden. Manchmal ist es ggf. besser darauf zu verzichten, beim debuggen aber sollte es imho dabei sein! Etwa so:
PHP-Code:
<?php
  $sql 
"SELECT
              `feldname`, `nocheinfeldname`, `undnochfeldname`
          FROM
              `tabellenname`
          WHERE
              `feldname` LIKE '%suchwort%'
            AND
              `nocheinfeldname` = 'wert'
          ORDER BY
              `undnochfeldname` ASC
          LIMIT
              0 , 30"
;
  
$result mysql_query($sql) or exit('<h2>Fehler</h2>sql-querry: '$sql.'<br />error: '.mysql_error());
  
// ...
?>
exit
mysql_error

Voteilhaft ist auch, wenn man reservierte Bezeichnungen für Felder nutzt, wie zB date, dass man diese dann in ´ setzt (s. Beispiel).
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.08.2007, 22:17 Nach oben    #6
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

OK, ich gebe mich geschlagen, hätte mir das doch genauer angucken sollen

Jann hat Recht. Da der Insert aber so nicht funktionieren kann, ist folgende Aussage bischen merkwürdig:
Zitat:
solange der stream läuft werden die inputs aber nicht der tabelle hinzugefügt. erst nach verlassen des streams und erneutem aufruf sind die bisher (scheinbar gepufferten) inserts sichtbar.
Sprich, das ist mit dem Code-Fragment von dir aufgrund eines SQL-Fehlers gar nitt möglich. Und daher war meine Nachfrage, wie du denn verifiziert hast, dass es tatsächlich geinsertet wird, ja nicht sooo schlecht

Rest ist Transferleistung aus Janns Post und meinem.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.08.2007, 23:02 Nach oben    #7
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.378
Standard

puh, ich habe schon gedacht mich möglicherweise zu weit aus dem Fenster gelehnt zu haben...

traute mich schon fast nicht zu posten nach dem ich das hier:
Zitat:
Zitat von mepeisen Beitrag anzeigen
(normal deswegen um Klugscheißern wg. Transaktionsverhalten u.ä. vorzubeugen *g*).
gelesen habe...

Dabei scheiße ich doch so gerne klug - wenn ich denn auch mal was weiß

und nein - das soll hier nicht weiter thematisiert werden - in diesem thread geht es um was anderes!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[MySQL] INSERT mit Wert aus einer Liste... WarrenFaith Datenbanken 6 16.05.2007 16:58
[MySQL] Was macht INSERT IGNORE/INSERT DELAYED, Anwendungsbeispiele Ben Datenbanken 7 05.02.2007 18:23
Textarea mit auto Zeilenumbruch bei INSERT Jan Datenbanken 2 01.04.2006 13:48
PRoblem mit Cookie bei PHPbb-Board Julied64 PHP-Programmierung 2 12.12.2005 15:41


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45