sql >> Base de Datos >  >> RDS >> Mysql

Número de parámetro no válido:no se vincularon parámetros

No está utilizando bind_param, según el paradigma de declaración preparada.

En su selección:

$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();

Y en tu actualización:

$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();

Lo anterior permite que su declaración preparada acepte parámetros en el formato de cadena parametrizada (usando "?" para representar un parámetro) y acepte parámetros con información de tipo, a través del método bind_param().

Esto permite que el motor de la base de datos emita y escape correctamente los parámetros antes de ejecutar su consulta.

No tiene sentido usar declaraciones preparadas si no está vinculando parámetros, que es probablemente la razón por la que recibe esa advertencia.

En una nota al margen, la concatenación de consultas (como lo está haciendo arriba) es un hábito muy malo:lo abre a Inyección SQL

Consulte los documentos para obtener más información sobre declaraciones preparadas:

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