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

Jak przekonwertować skrypt używający funkcji mysql_, aby używał funkcji mysqli_?

Uwaga: Konwersja z mysql_ do mysqli_ może nie być optymalna. Rozważ PDO jeśli jesteś przygotowany do konwersji całego kodu na OOP .

Może być kusząca próba zastąpienia wszystkich wystąpień mysql_ z mysqli_ i módlcie się, żeby to działało. Byłbyś blisko, ale nie do końca na miejscu.

Łączenie z bazą danych:

Na szczęście mysqli_connect działa wystarczająco blisko, aby mysql_query że możesz po prostu zamienić ich nazwy funkcji.

mysql_:

$con = mysql_connect($host, $username, $password);

mysqli_:

$con = mysqli_connect($host, $username, $password);

Wybieranie bazy danych

Teraz, z większością innych funkcji w mysqli_ bibliotekę, musisz przekazać mysqli_select_db połączenie z bazą danych jako pierwsze parametr. Większość mysqli_ funkcje wymagają najpierw obiektu połączenia.

W przypadku tej funkcji możesz po prostu zmienić kolejność argumentów, które przekazujesz do funkcji. Jeśli wcześniej nie przekazałeś mu obiektu połączenia, musisz teraz dodać go jako pierwszy parametr.

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Jako bonus możesz również przekazać nazwę bazy danych jako czwarty parametr do mysqli_connect - ominięcie konieczności wywoływania mysqli_select_db .

$con = mysqli_connect($host, $username, $password, $dbname);

Oczyść dane wejściowe użytkownika

Korzystanie z mysqli_real_escape_string jest bardzo podobny do mysql_real_escape_string . Wystarczy przekazać obiekt połączenia jako pierwszy parametr.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

$value1 = mysqli_real_escape_string($con, $input_string);

Bardzo ważne:przygotowywanie i uruchamianie zapytania

Jednym z powodów mysql_ funkcje były przestarzałe, na początku była ich niezdolność do obsługi przygotowanych instrukcji. Jeśli po prostu przekonwertujesz kod do mysqli_ bez podjęcia tego ważnego kroku, jesteś narażony na niektóre z największych słabości mysql_ Funkcje.

Warto przeczytać te artykuły na temat przygotowanych zestawień i ich korzyści:

Wikipedia – Przygotowane oświadczenia

PHP.net - Przygotowane oświadczenia MySQLi

Uwaga:podczas korzystania z przygotowanych instrukcji najlepiej jest jawnie wymienić każdą kolumnę, do której próbujesz wykonać zapytanie, zamiast używać * notacja do zapytania wszystkich kolumn. W ten sposób możesz mieć pewność, że uwzględniłeś wszystkie kolumny w wywołaniu mysqli_stmt_bind_result .

mysql_:

$query = 'SELECT * FROM table1 WHERE table1.col1=' . $value1 . '';
$result = mysql_query($query, $con);
while($row = mysql_fetch_assoc*$result)
{
    $col1 = $row['col1'];
    $col2 = $row['col2'];

    echo $col1 . ' ' . $col2 . '<br />';
}

mysqli_:

$query = 'SELECT col1,col2 FROM table1 WHERE table1.col1=?';
if ($stmt = mysqli_prepare($link, $query)) {

    /* pass parameters to query */
    mysqli_stmt_bind_param($stmt, "s", $value1);

    /* run the query on the database */
    mysqli_stmt_execute($stmt);

    /* assign variable for each column to store results in */
    mysqli_stmt_bind_result($stmt, $col1, $col2);

    /* fetch values */
    while (mysqli_stmt_fetch($stmt)) {
        /*
            on each fetch, the values for each column 
            in the results are automatically stored in 
            the variables we assigned using 
            "mysqli_stmt_bind_result"
        */
        echo $col1 . ' ' . $col2 . '<br />';
    }

    /* close statement */
    mysqli_stmt_close($stmt);
}

Wyświetlanie błędów

Wyświetlanie błędów działa trochę inaczej z mysqli_ . mysqli_error wymaga obiektu połączenia jako pierwszego parametru. Ale co, jeśli połączenie się nie powiedzie? mysqli_ wprowadza mały zestaw funkcji, które nie wymagają obiektu połączenia:mysqli_connect_* funkcje.

mysql_:

if (!$con) {
    die('Could not connect: ' . mysql_error());
}

if (!$result) {
    die('SQL Error: ' . mysql_error());
}

mysqli_:

/* check connection error*/
if (mysqli_connect_errno()) {
    die( 'Could not connect: ' . mysqli_connect_error() );
}

/* check query error */
if ($stmt = mysqli_prepare($link, $query)) {

    // ... execute query

    if (mysqli_stmt_error($stmt)) {
        echo 'SQL Error: ' . mysqli_stmt_error($stmt);
    }
}


  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:Optymalizacja znajdowania super węzła w zagnieżdżonym drzewie zestawów

  2. PreparedStatement zgłasza błąd składni

  3. MySQL pasujący do 2 z 5 pól

  4. jak wybrać losowe unikalne rekordy przy każdym wykonaniu zapytania SQL

  5. Huśtawka combobox Java