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

Как да конвертирам скрипт с помощта на mysql_ функции, за да използвам mysqli_ функции?

Забележка: Преобразуване от mysql_ към mysqli_ може да не е оптимално. Помислете за PDO ако сте готови да конвертирате целия си код в OOP .

Може да бъде изкушаващо да се опитате да замените всички екземпляри на mysql_ с mysqli_ и се моли да работи. Ще бъдеш близо, но не съвсем на място.

Свързване с базата данни:

За щастие, mysqli_connect работи достатъчно тясно за mysql_query че можете просто да смените имената на техните функции.

mysql_:

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

mysqli_:

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

Избор на база данни

Сега, с повечето други функции в mysqli_ библиотека, ще трябва да предадете mysqli_select_db връзката с базата данни като нейпърва параметър. Повечето от mysqli_ функции изискват първо обекта на свързване.

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

mysql_:

mysql_select_db($dbname, $con);

mysqli_:

mysqli_select_db($con, $dbname);

Като бонус можете също да подадете името на базата данни като четвърти параметър на mysqli_connect - заобикаляне на необходимостта от извикване на mysqli_select_db .

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

Почистете въведеното от потребителя

Използване на mysqli_real_escape_string е много подобен на mysql_real_escape_string . Просто трябва да предадете обекта на връзката като първи параметър.

mysql_:

$value1 = mysql_real_escape_string($input_string);

mysqli_:

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

Много важно:Подготовка и изпълнение на заявка

Една от причините mysql_ функциите бяха отхвърлени в началото с неспособността им да обработват подготвени изявления. Ако просто конвертирате кода си в mysqli_ без да предприемете тази важна стъпка, вие сте обект на някои от най-големите слабости на mysql_ функции.

Струва си да прочетете тези статии за подготвените изявления и техните предимства:

Уикипедия – Подготвени изявления

PHP.net - MySQLi подготвени изявления

Забележка:Когато използвате подготвени изрази, най-добре е изрично да посочите всяка колона, която се опитвате да направите заявка, вместо да използвате * нотация за запитване на всички колони. По този начин можете да сте сигурни, че сте отчитали всички колони във вашето обаждане до 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);
}

Показване на грешки

Показването на грешки работи малко по-различно с mysqli_ . mysqli_error изисква обекта на връзката като свой първи параметър. Но какво ще стане, ако връзката се провали? mysqli_ въвежда малък набор от функции, които не изискват обекта за връзка:mysqli_connect_* функции.

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

  2. Как да изберете до достигане на сума

  3. Предупреждение:mysql_result() [function.mysql-result]:Не може да се премине към ред 0 на MySQL резултатен индекс 5 в profile.php на ред 11

  4. Създаване на масив с помощта на рекурсивен php от mysql

  5. Последни x записи в блога - но само веднъж на потребител