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

Przełącz dużą witrynę z MySQL na MySQLi

Nie ma łatwej odpowiedzi na twoje pytanie, ponieważ praktycznie każdy prosty sposób, aby to zrobić, polegał na robieniu rzeczy inaczej, gdy aplikacja została napisana.

Jeśli masz bezpośrednie wywołania funkcji mysql_* w całym kodzie i nie masz warstwy abstrakcji bazy danych, w której wykonujesz zapytania za pomocą klasy lub funkcji pomocniczej, będziesz musiał edytować każde polecenie.

Nie możesz po prostu uciec od dodania i do poleceń takich jak mysql_query jako proceduralnie mysqli_query() wymaga, aby pierwszy parametr był linkiem do bazy danych, gdzie z mysql_query() jeśli w ogóle podano połączenie, był to drugi parametr.

Zamiast po prostu zmienić mysql_query(...) na mysqli_query($link,.....) sugerowałbym, że nie ma lepszego czasu na umieszczenie warstwy abstrakcji db. Więc użyj funkcji, np. sql_query(), które faktycznie przetwarzają twoje zapytania, więc w przyszłości, jeśli będziesz musiał ponownie zmienić DB, możesz po prostu zaktualizować polecenia specyficzne dla bazy danych w jednym pliku abstrakcji. W ten sposób, jeśli napiszesz funkcję, która zawija mysqli_query, możesz po prostu zmienić nazwę mysql_query() na swoją funkcję pomocniczą i pozwolić funkcji pomocniczej martwić się o umieszczenie tam linku.

Chociaż jest to najprostszy sposób, nie wiąże parametrów ani nie przygotowuje instrukcji, co jest głównym czynnikiem zapobiegającym lukom w zabezpieczeniach wstrzykiwania sql

Po zmianie wszystkich tych poleceń musisz przetestować.

Jeśli nie masz napisanych testów automatycznych, to prawdopodobnie jest to dobry moment, aby zacząć je pisać. Nawet jeśli będziesz musiał sprawdzić, czy każda zmiana zadziałała, jeśli zrobisz to za pomocą automatycznego testu, możesz uniknąć tego bólu w przyszłości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP.net mówi, że md5() i sha1() nie nadają się do hasła?

  2. PHP/MySQL 2 instrukcje 'while' z 1 zapytania mysql?

  3. Zapytanie o złożone kryteria:używanie JPA zamiast NativeQuery

  4. PHP MySQL PDO lastInsertID powoduje błąd krytyczny

  5. Dlaczego M pojawia się w Clojure MySQL Query Results?