sql >> Database >  >> RDS >> Mysql

Ongeldig parameternummer:er zijn geen parameters gebonden

Je gebruikt geen bind_param, volgens het paradigma van de voorbereide verklaring.

In uw keuze:

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

En in je 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();

Met het bovenstaande kan uw voorbereide instructie parameters accepteren in het geparametriseerde tekenreeksformaat (met behulp van "?" om een ​​param weer te geven), en om params met type-informatie te accepteren, via de bind_param() methode.

Hierdoor kan de DB-engine params correct casten en escapen voordat uw query wordt uitgevoerd.

Het heeft geen zin om voorbereide verklaringen te gebruiken als je geen bindende parameters bent, en dat is waarschijnlijk de reden waarom je die waarschuwing krijgt.

Even terzijde, het aaneenschakelen van zoekopdrachten (zoals je hierboven doet) is een zeer slechte gewoonte - het opent je voor SQL-injectie

Zie de documenten voor meer informatie over voorbereide verklaringen:

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




  1. Beginnummer van bestelling wijzigen in Magento

  2. Maak een VIEW met parameters in SQL Server 2008

  3. mssql converteer varchar naar float

  4. Maak een nieuwe Ruby on Rails-toepassing met MySQL in plaats van SQLite