php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.06.2009, 12:20  
Neuer Benutzer
 
Registriert seit: 10.06.2009
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
Slithers befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] UPDATE wird trotz if clause vor SELECT ausgeführt

Hi Leute,

ich bin mit meinem Latein am Ende. Hier ist mein Script (verkürzt aufs wesentliche)

PHP-Code:
$arraycount count($einarray);

$result $mysqli->query"SELECT id FROM tabelle WHERE (bedingung1 OR bedingung2) AND bedingung3 LIMIT 7" );
$numrows $result->num_rows;
$result->free();

if ( 
$numrows === $arraycount ){
    
$mysqli->query"UPDATE tabelle SET feld = '1' WHERE (bedingung1 OR bedingung2) AND bedingung3 LIMIT 7" );
} else {
    return 
false;
}
return 
true
sowohl die UPDATE, als auch die UPDATE anweisung betreffen also mehrere zeilen.

dieses script gibt immer false zurück, aber die UPDATE anweisung wird nachweislich ausgeführt. wenn ich $numrows ausgeben lasse ist es immer genau um 1 kleiner als $arraycount. egal ob vor oder nach dem UPDATE.
also UPDATE dürfte gar nicht ausgeführt werden, da $numrows eben um 1 kleiner ist als $arraycount.

jetzt das interessante:
wenn ich die zeile mit dem UPDATE auskommentiere, macht das script was es soll. $numrows hat den richtigen wert und das script gibt true zurück.

aus irgendeinem grunde wird UPDATE scheinbar vor SELECT ausgeführt. ich habe deshalb schon versucht beim UPDATE mit LOW_PRIORITY zu arbeiten, aber auch ohne erfolg.

hat jemand einen tip oder lösungsvorschlag?
Slithers ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.06.2009, 13:50  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

PHP-Code:
$mysqli->query"UPDATE tabelle SET feld = '1' WHERE (bedingung1 OR bedingung2) AND bedingung3 LIMIT 7" ); 
Kann mir gar nicht vorstellen das diese Abfrage Sinn machen kann. Warum nur 7 Einträge updaten?

Zitat:
aus irgendeinem grunde wird UPDATE scheinbar vor SELECT ausgeführt.
Wenn der Code der ist den du oben gepostet hast, kann das schwer möglich sein! Von einer GOTO - Funktion wie in Basic habe ich bei PHP noch nicht gehört (ist auch besser so).

Zitat:
dieses script gibt immer false zurück, aber die UPDATE anweisung wird nachweislich ausgeführt.
Wie kommst du drauf?

Warum nutzt du hier:
PHP-Code:
if ( $numrows === $arraycount ){ 
=== und nicht einfach == . Eine Typumwandlung sollte hier doch nicht notwendig sein?
Asipak ist offline   Mit Zitat antworten
Alt 10.06.2009, 16:13  
Neuer Benutzer
 
Registriert seit: 10.06.2009
Beiträge: 3
PHP-Kenntnisse:
Fortgeschritten
Slithers befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Asipak Beitrag anzeigen
Wenn der Code der ist den du oben gepostet hast, kann das schwer möglich sein! Von einer GOTO - Funktion wie in Basic habe ich bei PHP noch nicht gehört (ist auch besser so).
Eben deshalb frage ich ja hier nach. Vielleich ist das ja irgendein bekannter Bug?!

Zitat:
Zitat von Asipak Beitrag anzeigen
Wie kommst du drauf?
phpmyadmin
sonst kann die zeile nicht ausgeführt worden sein. sie existiert nur einmal in diesem script, in diesem if clause

Zitat:
Zitat von Asipak Beitrag anzeigen
Warum nutzt du hier:
PHP-Code:
if ( $numrows === $arraycount ){ 
=== und nicht einfach == . Eine Typumwandlung sollte hier doch nicht notwendig sein?
das ist richtig. ich wollte nur absolut sicher gehen. auch mit dem == bleibt das ergebnis gleich.


ich hab das script mal so umgeschrieben, dass immer nur eine zeile abgefragt wird und habe auch die limits rausgenommen.
ich habe die bezeichnung jetzt mal so von mir übernommen. auch von den tabellen.

PHP-Code:
$b = array();

        foreach (
$booked_dates as $adate){ //$booked_dates ist ein array mit einer reihe von zeitangaben im mysql datetime format
        
            
$result_check_if_free $mysqli->query"SELECT id FROM tt_sod WHERE wann = '$adate' AND cid = '$cid' AND sodstatus = '0'" );
// $cid ist eine einfache zahl. in der db die id einer kategorie
            
if ($result_check_if_free->num_rows != 0){
                
$b[] = $result_check_if_free->fetch_object()->id;
                
            }
            
$result_check_if_free->free();
        }
        
        
$countb count($b);
        
        
        
// $count_sod_days ist count($booked_dates). Das array von oben^^
        
echo $countb." - ".$count_sod_days;
               
        if ( 
$countb == $count_sod_days ){
            echo 
"Test";
            foreach (
$b as $idtochange){
                
                
$mysqli->query"UPDATE tt_sod SET sodstatus = '1' WHERE id = '$idtochange'" );
            }
            
        } 
nehmen wir an in $booked_dates wäre 5 daten enthalten. diese daten werden nun in der ersten schleife mit der datenbank abgeglichen, ob der status 0 ist.
wenn ja kommt die zugehörige id ins array $b.
WENN alle 5 daten auch in der datenbank sind und den status 0 haben, sollte das script folgendes tun:
"5 - 5" ausgeben
"Test" ausgeben
die 5 update anweisungen ausführen (den status auf 1 setzen).

TUT ES ABER NICHT !!!!!!!!
es gibt "0 - 5" aus und führt die UPDATE anweisung aber definitiv aus!!!!!!! und "Test" wird auch nicht ausgegeben.

wenn ich die update zeile auskommentiere, dann gibt er
"5 - 5"
"Test" aus und führt die UPDATE anweisung nicht aus, da sie auskommentiert ist.

ein mysterium ideen??
Slithers ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql_query Update wird nicht ausgeführt willswissen1992 PHP Tipps 2009 3 02.06.2009 21:09
UPDATE über PHP liefert leeren Wert trotz Eingabe Metalphreek PHP-Fortgeschrittene 7 25.08.2008 00:09
Update / syntaxfehler prinzli Datenbanken 7 24.11.2007 21:24
Update Query wird zwar ausgeführt aber... JDF1976 Datenbanken 8 22.03.2006 11:56
[Erledigt] PHP - MySQL Script wird trotz exit ausgeführt Datenbanken 5 21.01.2006 12:50
mysql problem: mysql update wird nicht ausgeführt schmiddy PHP Tipps 2007 4 27.12.2005 20:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
if clauses php, mysqli_query \immer false\, mysqli low_prority, php if numrows, mysqli update select, php where select with clause, if clauses php ==, php if wird trotz false ausgeführt, tabellen update nach where clause, mysql select in if-clause, if mysql num rows kleiner als, if clauses limit php, update with if clause, fehler bei fetch_object() wenn php query keine daten liefert, if clauses code, if clause phpmyadmin

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:04 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum