Heim >Datenbank >MySQL-Tutorial >Warum schlägt „bindParam' mit Konstanten fehl und wie kann ich stattdessen „bindValue' verwenden?

Warum schlägt „bindParam' mit Konstanten fehl und wie kann ich stattdessen „bindValue' verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 02:17:08844Durchsuche

Why Does `bindParam` Fail with Constants and How Can I Use `bindValue` Instead?

Behebung des Fehlers „Parameter 2 kann nicht als Referenz übergeben werden“ bei Verwendung von bindParam mit Konstanten

In Ihrem Codeausschnitt wird der Fehler „Kann nicht übergeben“ angezeigt übergeben Sie Parameter 2 als Referenz“, wenn Sie versuchen, bindParam mit einem konstanten Wert zu verwenden (z. B. PDO::PARAM_NULL). Dieser Fehler tritt auf, weil bindParam eine Variable zum Binden benötigt, während Sie einen konstanten Wert übergeben.

Um dieses Problem zu beheben, müssen Sie bindValue anstelle von bindParam verwenden. bindValue bindet einen Wert direkt an den Parameter und nicht an eine Variable. Hier ist der korrigierte Code:

try {
    $dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
catch(PDOException $e)
{
    ...
}
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)');
$stmt->bindValue(':v1', null, PDO::PARAM_INT); // Using bindValue with null and explicit type

Hinweis: Sie könnten versucht sein, bindValue(':param', null, PDO::PARAM_NULL) zu verwenden, aber dieser Ansatz funktioniert nicht immer . Stattdessen wird empfohlen, den expliziten Typ zu verwenden, wie in diesem Beispiel PDO::PARAM_INT.

Das obige ist der detaillierte Inhalt vonWarum schlägt „bindParam' mit Konstanten fehl und wie kann ich stattdessen „bindValue' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn