Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Problem z wiązaniem parametru Mysqli

$suquery=$dbCon->prepare("select * from Table where ? LIKE ?");

Nie będzie działać zgodnie z oczekiwaniami. Zostanie przetłumaczony jako:

SELECT * from table WHERE 'columnName' LIKE '%a%'

który zwraca wszystkie wiersze, ponieważ „nazwakolumny” zawiera „a”. 'columnName' to ciąg, a nie rzeczywista nazwa kolumny.

Twoja druga próba jest prawidłowa, z wyjątkiem dodatkowego cudzysłowu w terminie. Używając parametrów, nie potrzebujesz żadnych cudzysłowów. Rozwiązaniem jest:

$term = "%".$_POST['searchTerm']."%";
$suquery=$dbCon->prepare("select * from Table where columnName LIKE ?");
$suquery->bind_param('s', $term);
$suquery->execute();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie aliasu zapytania do łączenia się z inną tabelą MySQL

  2. Zapobieganie wstrzykiwaniu SQL w PHP za pomocą operacji na ciągach

  3. Czy istnieje odpowiednik funkcji multi_query() w MySQL w PDO?

  4. MySQL:Jak wstawić rekord dla każdego wyniku w zapytaniu SQL?

  5. MySQL — wydajne wyszukiwanie z częściowym dopasowaniem słów i wynikiem trafności (FULLTEXT)