php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.07.2008, 15:08  
Neuer Benutzer
 
Registriert seit: 26.06.2008
Beiträge: 21
Tofte83 befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Cannot use a scalar value as an array

Hi!

Ich möchte mit folgendem Code:
PHP-Code:
$sql_gesamt "SELECT Id FROM devices;";
 
$erg_sql mssql_query($sql_gesamt);
       while (
$row mssql_fetch_array($erg_sql)){
                
$anzahlEintraegeGesamt[] = $row['Id'];
       } 
In dem Array $anzahlEintraegeGesamt[] alle Id's speichern und dann mit einer foreach-Schleife:
PHP-Code:
        foreach ($anzahlEintraegeGesamt as $i){
 
       
$sql_1 "SELECT * FROM Nodes AS n INNER JOIN devices AS d ON n.DeviceId = d.Id WHERE n.Id = $i"
diese Abfrage starten.
Aber leider quittiert er mir das mit: "Cannot use a scalar value as an array".
Was ist mein Fehler?

Dank & Gruß Tofte83
Tofte83 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.07.2008, 15:11  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Welche Zeile? Das foreach?

SQL solltest Du ohnehin nicht in ner Schleife absetzen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 28.07.2008, 15:19  
Neuer Benutzer
 
Registriert seit: 26.06.2008
Beiträge: 21
Tofte83 befindet sich auf einem aufstrebenden Ast
Standard

Hi nikosch!

Er beschwert sich bei der Zuweisung
PHP-Code:
 $anzahlEintraegeGesamt[] = $row['Id']; 
mit "Cannot use a scalar value as an array"

Was spricht dagegen SQL in einer Schleife abzusetzen? Ich muss die Abfrage eben für jeden Eintrag durchführen. Welche bessere Lösung gäbe es dafür?

LG Tofte83
Tofte83 ist offline  
Alt 28.07.2008, 15:44  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ist doch Blödsinn, mit einer Abfrage zuerst alle Id's zu holen, und dann mit jeder Id einen eigene Abfrage für den Rest der Daten zu holen. Das erreichst du doch mit der zweiten Abfrage ohne WHERE-Bedingung direkt:
PHP-Code:
$sql_1 "
    SELECT
        n.id,
        n.attr_1,
        ...,
        n.attr_n,
        d.attr_x,
        ...
    FROM 
        nodes AS n 
    INNER JOIN 
        devices AS d ON n.deviceId = d.id "

Da hast du schon alle Daten, mit einer einzigen Abfrage.
__________________
Gruss
L
lazydog ist offline  
Alt 28.07.2008, 15:58  
Neuer Benutzer
 
Registriert seit: 26.06.2008
Beiträge: 21
Tofte83 befindet sich auf einem aufstrebenden Ast
Standard

Das Problem ist aber etwas komplexer.


PHP-Code:
   $sql_gesamt "SELECT Id FROM devices;";
      
$erg_sql mssql_query($sql_gesamt);
       while (
$row mssql_fetch_array($erg_sql)){
              
$anzahlEintraegeGesamt[] = $row['Id'];}
 
 
        foreach (
$anzahlEintraegeGesamt as $i){
                    
$anzahlEintraegeID 0;
 
              
$sql "SELECT Id FROM nodes WHERE DeviceId = $i";
                
$erg_sql mssql_query($sql);
                  while (
$row mssql_fetch_array($erg_sql)){
                         
$anzahlEintraegeID++;;
                  }
 
                     
$arrayID $anzahlEintraegeID 1;
 
                      
$sql_1 "SELECT * FROM Nodes AS n INNER JOIN devices AS d ON n.DeviceId = d.Id WHERE n.Id = $i";
                       
$erg_sql_1 mssql_query($sql_1);      
                        while (
$row mssql_fetch_array($erg_sql_1)){
                                  
$aktuellerStatus[] = $row['states'];
                         
                               
$aktuellerStatus $aktuellerStatus[$arrayId]; 
                                if (
$aktuellerStatus == '2'){
                                  echo 
$Id."<br />";
                                }
                        }                             
        } 
Mit der ersten SQL-Abfrage will ich alle Id's in ein Array. Mit der zweiten Abfrage zähle ich wie oft jede Id in einer anderen Tabelle vorkommt und nehme die Id dieser Tabelle und mit der dritten Abfrage greife ich auf den letzten Eintrag mit dieser Id in der Tabelle zu.


Aber: Um nochmal auf das ursprüngliche Thema zurückzukommen:
Mein eigentliches Problem ist: Cannot use a scalar value as an array!

Geändert von Tofte83 (28.07.2008 um 16:02 Uhr).
Tofte83 ist offline  
Alt 28.07.2008, 16:13  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ich mag das jetzt nicht im Detail studieren, insbesondere, da die Code-Einrückungen sehr willkürlich sind, und ich andererseits MSSQL nur wenig kenne. Ich bin aber immer noch überzeugt, dass auch dieses Problem mit einer Abfrage zu lösen wäre.
Aber zu deinem Problem: definiere mal dein Array, bevor du ihn füllst:
PHP-Code:
$anzahlEintraegeGesamt = array(); 
__________________
Gruss
L
lazydog ist offline  
Alt 28.07.2008, 16:34  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Was spricht dagegen SQL in einer Schleife abzusetzen? Ich muss die Abfrage eben für jeden Eintrag durchführen. Welche bessere Lösung gäbe es dafür?
Die Anfrage belastet den DB Server stark. Besser wäre z.B. eine Anfrage der Art
Code:
SELECT a, b, c WHERE id IN(1, 2 ,5)
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 28.07.2008, 16:57  
Neuer Benutzer
 
Registriert seit: 03.03.2008
Beiträge: 20
super.to_s befindet sich auf einem aufstrebenden Ast
Standard

vergleiche dazu auch

FAQ der Newsgroups de.comp.lang.php.* - 16.5.ªWie kann ich meine Datenbankperformance steigern?


und wo wir grad dabei sind und es in der oben geposteten faq auch so steht, hier gleich noch mal was, was man sich generell mal angewöhnen sollte

FAQ der Newsgroups de.comp.lang.php.* - 16.14.ªWarum soll ich nicht SELECT * schreiben?
super.to_s ist offline  
Alt 29.07.2008, 09:31  
Neuer Benutzer
 
Registriert seit: 26.06.2008
Beiträge: 21
Tofte83 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lazydog Beitrag anzeigen
Ich mag das jetzt nicht im Detail studieren, insbesondere, da die Code-Einrückungen sehr willkürlich sind, und ich andererseits MSSQL nur wenig kenne. Ich bin aber immer noch überzeugt, dass auch dieses Problem mit einer Abfrage zu lösen wäre.
Aber zu deinem Problem: definiere mal dein Array, bevor du ihn füllst:
PHP-Code:
$anzahlEintraegeGesamt = array(); 
Damit komme ich dann zu folgendem Fehler:

Warning: Invalid argument supplied for foreach() in C:\Inetpub\wwwroot\ad\devdb_test\alle_verliehenen. php on line 20




@super.to_s & nikosch: Danke für die Tipps, werde ich mir zu Herzen nehmen.
Tofte83 ist offline  
Alt 29.07.2008, 10:24  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Und wo hast du die Definition eingefügt? Und welches ist Zeile 20. Mensch, lass dir doch nicht immer alle Informationen aus der Nase ziehen!
__________________
Gruss
L
lazydog ist offline  
 


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
Prototype Ajax Array Datenmüll notyyy HTML, Usability und Barrierefreiheit 2 08.04.2008 10:57
Was mime_content_type übergeben dethlef14 PHP Tipps 2006 16 11.10.2006 17:35
MySQL mit phpMyAdmin verwalten Datenbanken 20 13.04.2006 11:13
PHP-Safe-Mode Configuration mit Xampp - Scripts laufen nicht DerN8WaechterX PHP Tipps 2006 7 27.01.2006 00:41
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Cannot use a scalar value as an array in PHP Tipps 2005-2 16 28.07.2005 14:11
[Erledigt] Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
[Erledigt] Error Mail() function PHP Tipps 2005 3 14.04.2005 03:32
[Erledigt] warum kann nicht SVG files laden? PHP Tipps 2005 16 09.03.2005 14:05
Thumb function PHP Tipps 2005 5 07.03.2005 22:28
[Erledigt] Warning: filemtime() [function.filemtime]: stat failed for PHP-Fortgeschrittene 12 25.02.2005 19:44
Session Problem beim Login PHP Tipps 2004-2 6 15.12.2004 09:37
Variable fehlt PHP Tipps 2004-2 4 10.12.2004 13:06
Einloggen funzt einfach nicht... PHP Tipps 2004 4 29.06.2004 11:12

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cannot use a scalar value as an array, cannot use a scalar value as an array in, cannot use a scalar value as an array php, warning: cannot use a scalar value as an array, \cannot use a scalar value as an array\, cannot use a scalar value as an array $_session, anzahl arrays elemente scalar cannot use, php cannot use scalar value array, cannot use a scalar value as an array zeile, cannot use a scalar value as an array i

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:46 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