Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ungültige Parameternummer:Es wurden keine Parameter gebunden

Sie verwenden bind_param nicht gemäß dem vorbereiteten Anweisungsparadigma.

In Ihrer Auswahl:

$sql = "SELECT id,msg,time,msg.from,msg.to 
        FROM msg 
        WHERE msg.from IN (?, ?) 
            AND msg.to IN (?, ?)
        ORDER BY time";

$ex = $conn->prepare($sql);
$ex->bind_param("s", $_SESSION["username"]);
$ex->bind_param("s", $_SESSION["tousermessage"]);
$ex->bind_param("s", $_SESSION["username"]);
$ex->bind_param("s", $_SESSION["tousermessage"]);
$ex->execute();

Und in Ihrem Update:

$sql = "UPDATE msg 
        SET readmsg=1 
        WHERE id = ? 
            AND msg = ?";

$ex1 = $conn->prepare($sql);
$ex1->bind_param("i", $result['id']);
$ex1->bind_param("s", $result["msg"]);
$ex1->execute();

Das obige ermöglicht Ihrer vorbereiteten Anweisung, Parameter im parametrisierten Zeichenfolgenformat zu akzeptieren (unter Verwendung von „?“ zur Darstellung eines Parameters) und Parameter mit Typinformationen über die Methode bind_param() zu akzeptieren.

Dadurch kann die DB-Engine Parameter vor der Ausführung Ihrer Abfrage richtig umwandeln und maskieren.

Es macht keinen Sinn, vorbereitete Anweisungen zu verwenden, wenn Sie keine Parameter binden, weshalb Sie wahrscheinlich diese Warnung erhalten.

Nebenbei bemerkt, das Verketten von Abfragen (wie Sie es oben tun) ist eine sehr schlechte Angewohnheit - es öffnet Sie für SQL-Injection

Weitere Informationen zu vorbereiteten Anweisungen finden Sie in der Dokumentation:

http://php.net/manual/en/mysqli-stmt.prepare .php