Mysql
 sql >> база данни >  >> RDS >> Mysql

Невалиден номер на параметър:няма обвързани параметри

Не използвате bind_param, съгласно подготвената парадигма на изявлението.

В избраното от вас:

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

И във вашата актуализация:

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

Посоченото по-горе позволява на подготвената ви декларация да приема параметри в параметризирания формат на низ (използвайки „?“ за представяне на параметър) и да приема параметри с информация за типа чрез метода bind_param().

Това позволява на DB машината да прехвърля правилно и escape параметри преди да изпълни вашата заявка.

Няма смисъл да използвате подготвени оператори, ако не обвързвате параметри, което вероятно е причината да получавате това предупреждение.

От друга страна, конкатенацията на заявките (както правите по-горе) е много лош навик - отваря ви до SQL инжекция

Вижте документите за повече информация относно подготвените изявления:

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. не може да се свърже с mysql docker от локално

  2. Проблем с Mysql с WHERE в клауза

  3. Конкатенация на низ и идентификатор на първичен ключ по време на вмъкване

  4. Mysql получава последния идентификационен номер на конкретна таблица

  5. ПОРЪЧАЙТЕ ПО ASC с нулеви стойности в долната част