[PHP] Only variables should be passed by reference

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Beste Tweakers

Ik heb een Database class, met daarin volgende functie:
code:
1
2
3
4
5
6
7
8
9
10
11
public function UserExists(User $u)
        {
            $stmt = $this->db_connection->prepare("SELECT * FROM users WHERE id = :id");
            $stmt->bindParam("id", $u->getId());
            $dbu = $stmt->fetchObject("User");

            if(is_null($dbu)){
                return false;
            }else{
                return true;
            }


Wat ik verwacht:
Ik kan een User object aan deze functie geven.
Er wordt een Prepared Statement gemaakt met id als variable.
Als geen UserObject terug krijg, bestaat de user niet. Anders wel.

Fout die ik krijg:
Strict Standards: Only variables should be passed by reference in /home/xxxxxxx/domains/xxxxxxx/public_html/ict/classes/Database.php on line 43
Probleem is dat ik nu altijd een true terug krijg, terwijl mijn database leeg is.

Iemand ideeën?

Dank!

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Stack Overflow: PDO pass by reference notice?

Sla $u->getId() op in z'n eigen variabele en bind die.

[ Voor 16% gewijzigd door CodeCaster op 13-06-2017 16:46 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 08-10 18:39

Not Pingu

Dumbass ex machina

Of gebruik .bindValue() ipv .bindParam().
Het idee van .bindParam() is dat de variabele die je opgeeft pas laat geëvalueerd wordt. Daarvoor moet de waarde wel by reference doorgegeven kunnen worden. Die getId() functie returnt waarschijnlijk een integer en daarvoor geldt dat niet.

Overigens moet je parameter ":id" zijn.

[ Voor 81% gewijzigd door Not Pingu op 13-06-2017 16:51 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Thanks, dat was het inderdaad. Heb dan toch maar geopteerd om bindValue() te gebruiken. Veel logischer om als value door te geven dan als reference.

Nog een vraagje. Waarom geeft mijn functie foutief true terug?

Is de is_null() niet correct op een object uit een lege database? Ik zou verwachten een null terug te krijgen van fetchObject als er geen resultaten zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Carharttguy schreef op dinsdag 13 juni 2017 @ 16:56:
Ik zou verwachten een null terug te krijgen van fetchObject als er geen resultaten zijn.
Waarom? http://php.net/manual/en/pdostatement.fetchobject.php

Acties:
  • +1 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Omdat 'ie false returnt bij "failure" (wat ook "geen regels" inhoudt).

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Carharttguy
  • Registratie: Juli 2010
  • Laatst online: 04-07 23:09
Helemaal juist Zaph.. Te snel overgelezen.

Ik ga altijd uit van .Net. Ik vind het persoonlijk veel logischer om een Null terug te krijgen dan een False. Maar ik vergeet altijd dat PHP mixed results kan hebben.
Pagina: 1