Frage

Der folgende Codeblock funktioniert gut (keine Fehler)

$query = "select * from users where username = ?";
$statement = $sql->prepare($query);
echo gettype($statement); // -- This returns 'object'
$statement->bindParam(1, $username);

Im Folgenden werden: Fatal error: Aufruf an eine Elementfunktion bindParam () auf einem Nicht-Objekt in /file.php auf Leitung 39

$email = 'fake@email.com';
$query = "select * from users where email = ?";
$statement = $sql->prepare($query);
echo gettype($statement); // -- this returns 'boolean'
$statement->bindParam(1, $email); // -- this is line 39.

Das ist aber seltsam.

Bei meinem lokalen Rechner und meinem Remote-Host, das war nie ein Problem.

Nur dieser Fehler zeigt sich auf diese neue Hosting-Firma, die ich für den Monat versuchen heraus. Könnte es eine Config-param sein, wenn sie PHP kompiliert?

-------- -------- bearbeiten Während noch zu versuchen, herauszufinden, was falsch ist, fand ich diese aus.

$query = "select userID, username from users";
$statement = $sql->prepare($query);    
$statement->execute();
$r = $statement->fetchAll(PDO::FETCH_ASSOC);

// display # of rows
echo "Rows returned: " . $statement->rowCount();

// display results array
echo '<pre>'; print_r($r); echo '</pre>'; 

Auf einem Server, bekomme ich

Rows returned: 4

Array
(
    [0] => Array
        (
            [userID] => 1
            [username] => lyrae
        )

    [1] => Array
        (
            [userID] => 2
            [username] => jproffer
        )

    [2] => Array
        (
            [userID] => 3
            [username] => king
        )

    [3] => Array
        (
            [userID] => 4
            [username] => gergy
        )

)

Welche ist richtig. Sagt 4 Zeilen zurückgegeben und zeigt das Ergebnis-Array. jedoch auf einem anderen Server, bekomme ich

Rows returned: 0

Array
(
    [0] => Array
        (
            [userID] => 1
            [username] => lyrae
        )

    [1] => Array
        (
            [userID] => 2
            [username] => jproffer
        )

    [2] => Array
        (
            [userID] => 3
            [username] => king
        )

    [3] => Array
        (
            [userID] => 4
            [username] => gergy
        )

)

So scheint es auch, dass PDOStatement :: rowCount () nicht auf einem Sever nicht arbeiten, sondern arbeitet auf einem anderen.

War es hilfreich?

Lösung 2

eine Lösung für das Problem gefunden.

Dies ist der gesamte Code-Block ..

// check if username exists
$query = "select * from users where username = ?";
$statement = $sql->prepare($query);
$statement->bindParam(1, $username);
$statement->execute();


// check if email exists
$sql2 = new PDO('mysql:host=localhost; dbname=db', 'username', 'pw');
$query = "select * from users";
$statement = $sql2->prepare($query);
echo gettype($statement);
#$statement->bindParam(1, $email);

So aus irgendeinem Grunde, ich habe eine neue Instanz der PDO zu erstellen. was seltsam ist, dass auf zwei anderen Servern, ich habe das nicht zu tun.

Und bei einer weiteren suchen, fand ich, dass PDO :: Bereiten Sie eine PDOExeption erhöht.

Hier ist sie:

SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

Array
(
    [0] => HY000
    [1] => 2014
    [2] => Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
)

Vielleicht wird es jemand in der Zukunft helfen:)

Andere Tipps

Lesen Sie dies: $ Anweisung-> Closecursor ()

  

PDOStatement :: Closecursor () gibt die Verbindung zum Server, so dass andere SQL-Anweisungen erteilt werden können,

Sind Sie die gleiche Datenbank auf dem Server mit denen Sie Ihnen nicht sagen, dieses Problem haben?

Ist $ email unbestimmt? Sie könnten eine var_dump ($ email) versuchen, zu sehen, was es sagt. Viel Glück.

Haben Sie versucht, die $email= Zeile unter dem bindParam setzen (aber bevor Sie das ausführen zu tun)? bindParam übergibt den Parameter als Referenz, so dass Sie als Abfrage ausführen können, wieder den Wert der Variablen und führen ändern.

Ich denke aber, dass es wahrscheinlich ein PHP einrichten Fehler. Ich habe gehört, wie Leute sagen PDO viele Fehler vor PHP 5.3 hatte, vielleicht sehen, ob Sie PHP bis auf die neueste Version bekommen?

Haben Sie auch versucht, das Vertauschen der beiden Abfragen um? Vielleicht etwas kaputt geht, nachdem Sie eine Abfrage ausführen.

Ich würde besser empfehlen dies mit:

$email = 'fake@email.com';
$query = "select * from users where email = ?";
$statement = $sql->prepare($query);
$statement->execute(array($email));

Nein BindParam Verwendung benötigt wird, um hier.

Ich hatte dasselbe Problem mit   echo "Zeilen zurückgegeben:". $ Anweisung-> rowCount ();

Ich habe -1 Reihen, lol. Meine Datenbank ist INFORMIX und die Suche Web-i gefunden daß rowCount (); gibt nur Zeilen in einem DELETE, INSERT betroffen oder UPDATE-Anweisung durch das entsprechende PDOStatement Objekt ausgeführt wird.

Mit einer SELECT-Anweisung müssen Sie Funktion verwenden,   $ Anweisung-> fetchColumn ();

lesen Sie hier: http://www.phpbuilder.com /manual/en/function.pdostatement-rowcount.php

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top