php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-08-2021, 14:27
TheGateway
 Registrierter Benutzer
Links : Onlinestatus : TheGateway ist offline
Registriert seit: Sep 2005
Beiträge: 34
TheGateway ist zur Zeit noch ein unbeschriebenes Blatt
Standard PHP 7 Simple Abfrage -> BindParam ?

Hi,

ich komme von PHP5.x, da war die Welt noch in Ordnung, notgedrungen muss ich mich mit dem Wirrwarr PHP7 nun auseinandersetzen.

Ich habe daher Folgende Frage:

PHP-Code:

    $stmt 
$mysql->prepare("SELECT * FROM postfach WHERE anID ='1'"); 
      
$stmt->execute();
      
$count $stmt->rowCount();
      while (
$row $stmt->fetch()) {
        
$text $row["text"];          
                 echo 
"$text";    

      } 
Funktioniert wie es soll.. Nun das Problem -> $userID soll verwendet werden .........

PHP-Code:
      $userID $_SESSION["user_id"];
      
$stmt $mysql->prepare("SELECT * FROM postfach WHERE anID = :userID"); 
      
$stmt->bindParam(':userID'$userIDPDO::PARAM_STR);
      
$stmt->execute();
      
$count $stmt->rowCount();
      while (
$row $stmt->fetch()) {
        
$text $row["text"];          
                 echo 
"$text";    

      } 
ich habe bereits sämtliche varianten von
PHP-Code:
$stmt->bindParam(':userID'$userID); 
$stmt->bindParam(':userID''25');
$stmt->bindParam(':userID'$userIDPDO::PARAM_STR);
$stmt->bindParam(':userID'$userIDPDO::PARAM_INT);
$stmt->execute(array(':userID' =>'25')) 
ausprobiert, ich bekomme es nicht hin, selbst die Beispiele von der PHP Doku klappten nicht... Whats Wrong?

im Übrigen klappt das Simple

PHP-Code:
$stmt $mysql->prepare("SELECT * FROM postfach WHERE anID ='$userID'"); 
auch nicht mehr, wieso muss man bei PHP7 das Rad neu erfinden


Könnte mir vielleicht jemand einen heißen Tipp geben ?

Geändert von TheGateway (26-08-2021 um 14:37 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 26-08-2021, 14:44
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.808
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Sieht für mich nach PHP 5 Code aus. Du verwendest hier nichts, was ein PHP 7-Feature wäre.

Was genau heißt "bekomme es nicht hin"? Was ergibt das Debugging?
Mit Zitat antworten
  #3 (permalink)  
Alt 26-08-2021, 14:51
TheGateway
 Registrierter Benutzer
Links : Onlinestatus : TheGateway ist offline
Registriert seit: Sep 2005
Beiträge: 34
TheGateway ist zur Zeit noch ein unbeschriebenes Blatt
Question

Zitat:
Zitat von h3ll Beitrag anzeigen
Sieht für mich nach PHP 5 Code aus. Du verwendest hier nichts, was ein PHP 7-Feature wäre.

Was genau heißt "bekomme es nicht hin"? Was ergibt das Debugging?
ich wüsste nicht das PHP5.x etwas wie execute(); verwendet und wenn scheint es gottseidank an mir vorbei gegangen zu sein . (mag auch der Driver PDO sein) aber das mein ich ja :P

Debugging wäre das nächste Problem, er zeigt mir keine Fehler an, weder in der error Log, noch als ausgabe.. gebe ich
PHP-Code:
echo $count
aus kommt ne 0. Das liegt wohl daran das ich die $userID im SELECT nicht rein bekomme.

früher ging es anstandslos:
PHP-Code:
mysql_query("SELECT * FROM postfach WHERE anID ='$userID'"); 
nun geht nüscht mehr *grrrr*
PHP-Code:
$stmt $mysql->prepare("SELECT * FROM postfach WHERE anID ='$userID'"); 

funktionieren, tut es aber nicht, er frisst einfach die $userID nicht, schreib ich ne '25' rein zeigt er mir das an, was er soll.

Geändert von TheGateway (26-08-2021 um 14:58 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 26-08-2021, 14:55
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.808
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TheGateway Beitrag anzeigen
ich wüsste nicht das PHP5.x etwas wie execute(); verwendet und wenn scheint es gottseidank an mir vorbei gegangen zu sein .
mysqli (und somit auch die execute-Methode) gibt es seit PHP 5.0.0 am 13. Juli 2004. Also 17 Jahre lang.

Zitat:
Zitat von TheGateway Beitrag anzeigen
Debugging wäre das nächste Problem, er zeigt mir keine Fehler an, weder in der error Log, noch als ausgabe.. gebe ich
PHP-Code:
echo $count
aus kommt ne 0. Das liegt wohl daran das ich die $userID im SELECT nicht rein bekomme.
Und was ergibt ein var_dump($userID)?

Zitat:
Zitat von TheGateway Beitrag anzeigen
Da es wohl kein PHP7 Code ist, ,müsste ja
PHP-Code:
$stmt $mysql->prepare("SELECT * FROM postfach WHERE anID ='$userID'"); 
funktionieren, tut es aber nicht, er frisst einfach die $userID nicht, schreib ich ne '25' rein zeigt er mir das an, was er soll.
Das hat aber mit PHP 7 nichts zu tun, sondern mit einem fehlerhaften Code.
Mit Zitat antworten
  #5 (permalink)  
Alt 26-08-2021, 15:01
TheGateway
 Registrierter Benutzer
Links : Onlinestatus : TheGateway ist offline
Registriert seit: Sep 2005
Beiträge: 34
TheGateway ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
mysqli (und somit auch die execute-Methode) gibt es seit PHP 5.0.0 am 13. Juli 2004. Also 17 Jahre lang.



Und was ergibt ein var_dump($userID)?



Das hat aber mit PHP 7 nichts zu tun, sondern mit einem fehlerhaften Code.

genau du hast recht, es liegt am driver, der für mich neu ist, deswegen bin ich ja hier, ich kenne das so alles nicht und google hat mir leider nicht geholfen, sonst wäre ich nicht hier

PHP-Code:
var_dump($userID); 
ergibt: string(2) "25"

ich sollte am debugging anfangen ....
wie gebe ich den SELECT Befehl aus den er ausführen soll ?
Da würde ich sehen ob der SELECT befehl richtig ist ...
ich denke wenn ich wüsste wie die ausgabe funktioniert, wäre ich schon viel weiter...

Geändert von TheGateway (26-08-2021 um 15:09 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 26-08-2021, 15:11
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.808
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ich persönliche finde ja Prepared Statements in mysqli ziemlich mühsam und habe ich selber nie wirklich verwendet, kann da also nur begrenzt helfen. Wenn man die verwenden will, würde ich persönlich gleich auf PDO wechseln oder halt mysqli ohne Prepared Statements verwenden.

PDO gibts übrigens seit PHP 5.1 (24. November 2005) und ist eigentlich für "neue" Projekte (also alles, was in den letzten 15 Jahren begonnen wurde) vorzuziehen. Warum es noch so viele Projekte gibt, die auf mysqli oder gar auf mysql (was noch von PHP 4 stammt, also von der Jahrtausendwende) aufbauen, ist mir ein Rätsel. Ich selber kenne mysqli nur von historisch alten Projekten, mit denen ich vor über 10 Jahren mal gearbeitet habe und mysql habe ich in meine Programmiererlaufbahn noch nie verwendet.

Aber ja, wer 20 Jahre altes Zeug verwendet, der hat jetzt beim Wechsel auf PHP 7 wohl einige Probleme, nachdem einige Kompatibilitäten zu PHP 4 fallen gelassen wurden.

mysqli verhält sich zwischen PHP 5 und PHP 7 meines Wissens nach gleich. Also wenn der Code so in PHP 5 funktoniert, dann auch in PHP 7 und umgekehrt.

Geändert von h3ll (26-08-2021 um 15:23 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 26-08-2021, 15:34
TheGateway
 Registrierter Benutzer
Links : Onlinestatus : TheGateway ist offline
Registriert seit: Sep 2005
Beiträge: 34
TheGateway ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Ich persönliche finde ja Prepared Statements in mysqli ziemlich mühsam und habe ich selber nie wirklich verwendet, kann da also nur begrenzt helfen. Wenn man die verwenden will, würde ich persönlich gleich auf PDO wechseln oder halt mysqli ohne Prepared Statements verwenden.

PDO gibts übrigens seit PHP 5.1 (24. November 2005) und ist eigentlich für "neue" Projekte (also alles, was in den letzten 15 Jahren begonnen wurde) vorzuziehen. Warum es noch so viele Projekte gibt, die auf mysqli oder gar auf mysql (was noch von PHP 4 stammt, also von der Jahrtausendwende) aufbauen, ist mir ein Rätsel. Ich selber kenne mysqli nur von historisch alten Projekten, mit denen ich vor über 10 Jahren mal gearbeitet habe und mysql habe ich in meine Programmiererlaufbahn noch nie verwendet.

Aber ja, wer 20 Jahre altes Zeug verwendet, der hat jetzt beim Wechsel auf PHP 7 wohl einige Probleme, nachdem einige Kompatibilitäten zu PHP 4 fallen gelassen wurden.

mysqli verhält sich zwischen PHP 5 und PHP 7 meines Wissens nach gleich. Also wenn der Code so in PHP 5 funktoniert, dann auch in PHP 7 und umgekehrt.
da gebe ich dir recht, ich habe ausschließlich mit mysql gearbeitet.

Könntest du mir noch verraten wie ich den Select Befehl ausgebe um zu überprüfen ob er alle variablen genommen hat?
Mit Zitat antworten
  #8 (permalink)  
Alt 26-08-2021, 15:43
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.808
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von TheGateway Beitrag anzeigen
Könntest du mir noch verraten wie ich den Select Befehl ausgebe um zu überprüfen ob er alle variablen genommen hat?
Das ist meines Wissens nach nicht möglich. Du kannst testweise ein "SELECT :userID" machen und schauen, ob der Wert dann im Abfrageergebnis landet.
Mit Zitat antworten
  #9 (permalink)  
Alt 26-08-2021, 15:51
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.808
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Also wenn ich mir die Doku anschaue, werden von mysqli wohl gar keine Named Parameter wie :userID unterstützt, sondern nur Question Mark Parameter:

https://www.php.net/manual/de/mysqli.prepare.php

Also das was du machen willst geht so gar nicht.
Mit Zitat antworten
  #10 (permalink)  
Alt 26-08-2021, 16:19
TheGateway
 Registrierter Benutzer
Links : Onlinestatus : TheGateway ist offline
Registriert seit: Sep 2005
Beiträge: 34
TheGateway ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von h3ll Beitrag anzeigen
Also wenn ich mir die Doku anschaue, werden von mysqli wohl gar keine Named Parameter wie :userID unterstützt, sondern nur Question Mark Parameter:

https://www.php.net/manual/de/mysqli.prepare.php

Also das was du machen willst geht so gar nicht.
sei mich nich böse, aber ich blicke garnichts mehr.

PHP-Code:
$stmt2 $mysql->prepare("SELECT * FROM users WHERE id = :vonID"); 
    
$stmt2->execute(array(':vonID' => $vonID)); 
funktioniert, liegt wohl daran das ich kein mysqli nutze sondern PDO ? ich sagte eingangs das es an PHP7 liegt dieses durcheinander, aber ich habe jetzt erkannt das es ausschließlich nur an dem Driver PDO, Mysqli, Mysql liegt. Ich komme von MYSQL und daher dieses wirrwar.

das Problem liegt also bei mir und meiner Unkenntnis diese Driver auseinander zu halten.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-08-2021, 17:07
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.808
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Sorry, das ist mein Fehler. Habe überlesen, dass es sich um PDO handelt.

PHP-Code:
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''root''', [
    
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

$userID '25';

$stmt $pdo->prepare('SELECT :userID');
$stmt->execute([':userID' => $userID]);

var_dump($stmt->fetch(PDO::FETCH_NUM)); 
Ausgabe:
Code:
array(1) {
  [0]=>
  string(2) "25"
}
Und hier eine Abfrage mit Beispieldaten:
PHP-Code:
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''root''', [
    
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

$pdo->query("
    CREATE TEMPORARY TABLE users (
        id INTEGER NOT NULL AUTO_INCREMENT,
        username VARCHAR(255) NOT NULL DEFAULT '',
        PRIMARY KEY (`id`)
    ) CHARSET=utf8mb4
"
);

$stmt $pdo->prepare("INSERT INTO users (username) VALUES (?)");
$stmt->execute(['foo']);
$stmt->execute(['bar']);
$stmt->execute(['bar']);


$userId 2;

$stmt $pdo->prepare("SELECT id, username FROM users WHERE id = :userId");
$stmt->execute([':userId' => $userId]);

var_dump($stmt->fetch(PDO::FETCH_ASSOC)); 
Ausgabe:
Code:
array(2) {
  ["id"]=>
  string(1) "2"
  ["username"]=>
  string(3) "bar"
}

Geändert von h3ll (26-08-2021 um 17:12 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
PDO bindParam Stonebreaker62 SQL / Datenbanken 29 31-07-2007 17:51
Simple IF Abfrage FRAD PHP Developer Forum 3 23-05-2005 14:30
simple Abfrage mishico SQL / Datenbanken 13 27-07-2004 11:49
simple mysql abfrage scheitert Diggicell PHP Developer Forum 9 21-10-2003 22:15
Simple DB-Abfrage ist falsch BlacKFoX PHP Developer Forum 7 04-10-2003 12:38

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

Kundengewinnung und Kundenbindung
Kundengewinnung und KundenbindungVertrieb läuft doch immer persönlich. Das funktioniert nicht mit dem Internet! Wirklich?

24.09.2021 | Berni

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni


 

Aktuelle PHP Scripte

Simple Forum PHP ansehen Simple Forum PHP

If you need simple forum or discussion on your website, then you've come to the right place. Simple Forum PHP is a script that is very easy to install and administer.

28.08.2021 nevenov | Kategorie: PHP/ Forum PHP Software
Formmailer Bootstrap 4

Mit dem Formmailer kann man sich eMails über seine Seite zukommen lassen.

08.07.2021 arne-home | Kategorie: PHP/ Formular
Fehlerseite Bootstrap 4

Bei Aufruf einer nicht existierenden Seite, teilen Sie Besuchern mit einer eigenen Fehlerseite mit, dass die gewünschte Seite nicht gefunden wurde. Die eigene Fehlerseite sollte dasselbe Design wie die Website haben. Zudem sollte ein Link zur Startseite a

04.07.2021 arne-home | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:44 Uhr.