php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.12.2011, 11:01  
Neuer Benutzer
 
Registriert seit: 14.12.2011
Beiträge: 23
PHP-Kenntnisse:
Anfänger
Ahatius befindet sich auf einem aufstrebenden Ast
Standard Prepared Statement: Array als Parameter

Hallo zusammen

Ich versuche eine Funktion zu basteln die mir nicht verwendete Einträge aus der Datenbank anzeigen soll. Hierzu habe ich ein Array mit Werten die benötigt werden. Das Array ist mehrdimensional hat den Aufbau wie folgt:

Code:
array(3) {
  [0]=>
  array(10) {
    [0]=>
    string(2) "xx"
    [1]=>
    string(7) "yyyyyyy"
    [2]=>
    string(3) "zzz"
    [3]=>
  }

  [1]=>
  array(25) {
    [0]=>
    string(3) "aaa"
    [1]=>
    string(6) "bbbbbb"
  }
}
Die Funktion selber sieht wie folgt aus:
PHP-Code:
public function getRemainingComponents () {
        
$array anotherFunction();
        
        
$sql 'SELECT
                    release, extrelease
                FROM
                    cvers
                WHERE
                    component 
                NOT IN
                    (?)'
;
    }

$stmt $this->db->prepare($sql);

$stmt->bindParam(1"???")

$stmt->execute(); 
Wie muss ich den bindParam aufbauen, so dass er mir alle Werte reinschreibt die nicht vorkommen dürfen? Vorgängig zusammen setzen kann ich sie ja nicht, da es sonst als ein grosser String angesehen wird.

Falls dass mehrdimensionale Array ein Problem sein sollte, kann ich auch alle Werte in ein einfaches Array packen, an dem solls nicht scheitern.

Danke schonmal!
Ahatius
Ahatius ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 14.12.2011, 11:53  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Das geht ja (leider!) nichtmal mit eindimensionalen Arrays. Du musst dir stattdessen den Query mit der entsprechenden Anzahl Fragezeichen dynamisch bauen und die Parameter dann entweder einzeln in einer Schleife binden oder bindParam mit call_user_func_array und einem flachen Array mit allen Werten aufrufen.
fab ist offline   Mit Zitat antworten
Alt 15.12.2011, 08:17  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

PHP-Code:
// the delivered input-array:

$couldBe = array(
   array(
      
'xx',
      
'yyyyyyy',
      
'zzz'
   
),
   array(
      
'aaa',
      
'bbbbbb'
   
)
);

// build a single dimensionized solution:
$normalizedCouldBe = array();

foreach ( 
$couldBe AS $item ) {
   if ( 
is_array($item) ) {
      foreach ( 
$item AS $subItem $normalizedCouldBe[] = $subItem;
   }
}

// build the field base:
$fieldCount count($normalizedCouldBe);
$sects range(1$fieldCount);

array_walk$sects, function ( &$item$key ) {
   
$item ':field'.$item;
});

// form the query
$sql "SELECT release, extrelease FROM cvers WHERE component NOT IN (";
$sql $sql.join(","$sects);
$sql $sql.")";

$stmt $this->db->prepare($sql);

// bind values to the formed query:
foreach ( $sects AS $key => $section ) {
   
$stmt->bindParam($section$normalizedCouldBe$key ], PDO::PARAM_STR);
}

// run:
$stmt->execute(); 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.

Geändert von tr0y (17.12.2011 um 02:34 Uhr). Grund: commented
tr0y ist gerade online   Mit Zitat antworten
Alt 16.12.2011, 13:08  
Neuer Benutzer
 
Registriert seit: 14.12.2011
Beiträge: 23
PHP-Kenntnisse:
Anfänger
Ahatius befindet sich auf einem aufstrebenden Ast
Standard

Danke für die Antworten.

Habe zwischenzeitlich eine Lösung ohne das prepared Statement verwendet (ist halt ne interne Applikation, da werd ich wohl nicht mit SQL Injections zu kämpfen haben, bei Datenbanken auf die sowieso jeder hier Zugriff hat).

Werde aber den Code-Schnippsel von tr0y mal ausprobieren, wenn ich Zeit habe das umzuschreiben.

Danke für die Antworten
Ahatius ist offline   Mit Zitat antworten
Alt 16.12.2011, 13:12  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Ich würd lieber vorsichtig sein, nicht das die Putzfrau über das Schrubber-Interface euren Server dDoS't.

Ne im ernst, verzichte nicht unbeholfen auf Sicherheit, die eigentlich Standard sein sollte. Gewöhn es dir garnicht erst an.. Mich hat der quellcode da oben 30 Sekunden Tippen gekostet. Dich kostet er vielleicht 5 Minuten Umbauen, dafür bleibste aber bei maximale Sicherheit.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist gerade online   Mit Zitat antworten
Alt 16.12.2011, 13:14  
Erfahrener Benutzer
 
Benutzerbild von wolf29
 
Registriert seit: 17.03.2010
Beiträge: 1.833
PHP-Kenntnisse:
Fortgeschritten
wolf29 wird schon bald berühmt werdenwolf29 wird schon bald berühmt werden
Standard

Zitat:
Mich hat der quellcode da oben 30 Sekunden Tippen gekostet
--> Flott, respekt.
__________________
while (!asleep()) sheep++;

Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.
wolf29 ist offline   Mit Zitat antworten
Alt 16.12.2011, 13:24  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Also für das Putzfrauen-Problem hätte ich ne Lösung. SmartCards für den Login
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 16.12.2011, 16:37  
Erfahrener Benutzer
 
Benutzerbild von fireweasel
 
Registriert seit: 20.03.2010
Beiträge: 474
PHP-Kenntnisse:
Fortgeschritten
fireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblickfireweasel ist ein Lichtblick
fireweasel eine Nachricht über ICQ schicken fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken fireweasel eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von wolf29 Beitrag anzeigen
--> Flott, respekt.
Off course it doesn't work[0], but look how fast I wrote it.

Aber der Ratschlag, Prepared-Statements zu benutzen, statt Benutzereingaben per String-Konkatenation einzufügen, bleibt trotzdem richtig.

[0] $stmt->bindPararm()

Geändert von fireweasel (16.12.2011 um 17:38 Uhr).
fireweasel ist offline   Mit Zitat antworten
Alt 16.12.2011, 17:21  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Zitat:
Zitat von tr0y Beitrag anzeigen
Mich hat der quellcode da oben 30 Sekunden Tippen gekostet.
OT: Respekt, das ist weltrekordverdächtig. 706 Zeichen (ohne Leerzeichen) in 30 Sekunden, das wären 1412 Zeichen pro Minute.
Trainmaster ist offline   Mit Zitat antworten
Alt 16.12.2011, 20:55  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Mich hat der quellcode da oben 30 Sekunden Tippen gekostet.
Mensch tr0y, ich hab dir schon hundertmilliarden mal gesagt, du sollst nicht so maßlos übertreiben
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz 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
Feed in Datenbank eintragen (Formate: json, php serialized, xml) high_five Datenbanken 5 17.06.2010 03:04
[Erledigt] Sortierung mehrerer Arrays philosapiens PHP Tipps 2010 16 08.06.2010 05:22
IE8 verliert Session Lenki PHP-Fortgeschrittene 10 25.04.2010 01:10
Ein (Teil)Array anhand von level und depth zurückgeben. greatcthulhu Scriptbörse 4 16.04.2010 10:45
[Erledigt] Problem bei update mit array feldern fulltilt PHP Tipps 2010 6 13.02.2010 00:59
[Erledigt] MySQLi Prepared Statements | bind_result() als Array || Variablenreferenze DeLoke PHP-Fortgeschrittene 10 10.09.2009 15:39
merge Array? tommy_725 PHP Tipps 2009 3 07.08.2009 18:30
[Erledigt] array sortieren PHP Tipps 2004 17 13.05.2009 10:44
array als Parameter? Hape42 PHP Tipps 2008 8 07.12.2008 20:37
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
select statement mit array als argument PHP Tipps 2004 2 29.10.2004 11:17

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
stmt array, §stmt array, php prepared statements result array

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