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

Czy mogę na ślepo zastąpić wszystkie funkcje mysql_ mysqli_?

Krótka odpowiedź to nie , funkcje nie są równoważne.

Dobrą wiadomością jest to, że istnieje narzędzie konwertujące, które pomoże ci, jeśli masz dużo połączeń/projektów do zmiany. Umożliwi to natychmiastowe działanie Twoich skryptów.

https://github.com/philip/MySQLConverterTool

Jest to rozwidlona wersja oryginalnej wersji Oracle i jest koszerna.

To powiedziawszy, aktualizacja kodu nie jest zbyt trudna, a mimo to możesz chcieć przejść na metodologię zorientowaną obiektowo...

1) Połączenie

Do wszystkich celów i celów potrzebujesz nowej funkcji połączenia, która zapisuje połączenie jako zmienną PHP, na przykład;

$mysqli = new mysqli($host, $username, $password, $database);

Zauważ, że zapisałem połączenie do $mysqli . Możesz zapisać do $db lub cokolwiek chcesz, ale powinieneś używać tego w całym kodzie, aby odwoływać się do połączenia.

Pamiętaj, aby włączyć raportowanie błędów dla mysqli przed otwarciem połączenia;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) Zapytanie

Uwaga:Należy chronić się przed wstrzyknięciem SQL za pomocą przygotowanych instrukcji, które są dostępne w MySQLi. Spójrz na Jak mogę zapobiec wstrzykiwaniu SQL w PHP? , ale omówię tutaj tylko podstawy.

Teraz musisz uwzględnić połączenie jako argument w zapytaniu i inne mysqli_ Funkcje. W kodzie proceduralnym jest to pierwszy argument, w OO piszesz go jak metodę klasy.

Proceduralne:

$result = mysqli_query($mysqli, $sql);

OO:

$result = $mysqli->query($sql);

3) Pobierz wynik

Pobieranie wyniku jest podobne do starego mysql_ funkcjonować w procedurach;

while ($row = mysqli_fetch_assoc($result))

ale jako $result jest teraz obiektem w mysqli, możesz użyć wywołania funkcji obiektu;

while ($row = $result->fetch_assoc())

4) Zamknij połączenie

Tak jak poprzednio, musisz uwzględnić połączenie w funkcji close; jako argument w procedurze;

mysqli_close($mysqli);

i jako obiekt, na którym uruchamiasz funkcję w OO;

$mysqli->close();

Byłbym tu na zawsze, gdybym przejrzał je wszystkie, ale rozumiesz. Spójrz na dokumentację po więcej informacji. Nie zapomnij przekonwertować żadnych funkcji zamykania połączenia, zwalniania wyników lub błędów i liczenia wierszy, które posiadasz.

Podstawowa zasada jest taka, że ​​dla funkcji korzystających z połączenia z bazą danych należy je teraz uwzględnić w funkcji (jako pierwszy argument w procedurze lub jako obiekt używany do wywołania funkcji w OO) lub jako zestaw wyników możesz po prostu zmienić funkcję na mysqli_ lub użyj zestawu wyników jako obiektu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Korzystanie z MariaDB

  2. automatyczny przyrost pierwotny pozostawiając przerwy w liczeniu

  3. Jak zobaczyć indeksy dla bazy danych lub tabeli w MySQL?

  4. Czy dodanie 'LIMIT 1' do zapytań MySQL przyspiesza je, gdy wiesz, że będzie tylko 1 wynik?

  5. MySQL - Operand powinien zawierać 1 kolumnę (kolumny)