sql >> Databáze >  >> RDS >> Mysql

Neplatné číslo parametru:nebyly svázány žádné parametry

Nepoužíváte bind_param podle připraveného paradigmatu příkazu.

Ve vašem výběru:

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

A ve vaší aktualizaci:

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

Výše uvedené umožňuje vašemu připravenému příkazu přijímat parametry ve formátu parametrizovaného řetězce (pomocí „?“ k reprezentaci parametru) a přijímat parametry s informacemi o typu prostřednictvím metody bind_param().

To umožňuje enginu DB správně přetypovat a uniknout parametry před provedením vašeho dotazu.

Nemá smysl používat připravená prohlášení, pokud nezavazujete parametry, což je pravděpodobně důvod, proč dostáváte toto varování.

Na okraj, zřetězení dotazů (jak to děláte výše) je velmi špatný zvyk – otevírá vám to Vložení SQL

Další informace o připravených prohlášeních naleznete v dokumentaci:

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




  1. Školení PostgreSQL pro MySQLery

  2. Problém s programem Java a připojením k MySQL:Nebyl nalezen žádný vhodný ovladač

  3. Jak mohu vypnout ověřování hesla mysql?

  4. ssh nejprve s mysqldb v pythonu