Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Número de parâmetro inválido:nenhum parâmetro foi vinculado


Você não está usando bind_param, conforme o paradigma da instrução preparada.

Na sua seleção:
$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();

E na sua atualização:
$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();

O acima permite que sua instrução preparada aceite parâmetros no formato de string parametrizado (usando "?" para representar um parâmetro) e aceite parâmetros com informações de tipo, por meio do método bind_param().

Isso permite que o mecanismo de banco de dados converta e escape adequadamente dos parâmetros antes de executar sua consulta.

Não faz sentido usar instruções preparadas se você não estiver vinculando parâmetros, o que provavelmente é o motivo pelo qual você está recebendo esse aviso.

Em uma nota lateral, a concatenação de consultas (como você está fazendo acima) é um hábito muito ruim - isso abre você para Injeção de SQL

Consulte os documentos para obter mais informações sobre declarações preparadas:

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