Изменить с mysql_result на mysqli_result [duplicate]

Кажется, что есть два решения; центрируется с использованием полей и центрируется с использованием положения. Оба работают нормально, но если вы хотите абсолютную позицию элемента относительно этого центрированного элемента, вам нужно использовать метод абсолютной позиции, потому что абсолютное положение второго элемента по умолчанию относится к первому родительскому объекту, который расположен. Например:

<!-- CENTERED USING MARGIN -->
<div style="width:300px; height:100px; border: 1px solid #000; margin:20px auto; text- align:center;">
    <p style="line-height:4;">width: 300 px; margin: 0 auto</p>
    <div style="position:absolute; width:100px; height:100px; background-color:#ff0000; top:-20px; left:0px;">
        <p style="line-height:4;">Absolute</p>
    </div>
</div>

<!-- CENTERED USING POSITION -->
<div style="position:absolute; left:50%; width:300px; height:100px; border: 1px solid #000; margin:20px 0 20px -150px; text-align:center;">
    <p style="line-height:2;">width:300px; position: absolute; left: 50%; margin-left:-150px;</p>
    <div style="position:absolute; width:100px; height:100px; background-color:#ff0000; top:0px; left:-105px;">
        <p style="line-height:4;">Absolute</p>
    </div>
</div>

Пока я не прочитал эту публикацию, используя автоматическую технику margin: 0, чтобы построить меню слева от моего содержимого, мне пришлось построить столбец одинаковой ширины для чтобы сбалансировать это. Не красиво. Спасибо!

37
задан Michael Berkowski 28 December 2013 в 22:34
поделиться

8 ответов

14
ответ дан Clamburger 20 August 2018 в 14:56
поделиться

Ну, вы всегда можете укоротить его примерно так:

if ($r && $r->num_rows)
    list($blarg) = $r->fetch_row();

Но это может быть так хорошо, как вы собираетесь получить.

3
ответ дан Dereleased 20 August 2018 в 14:56
поделиться

Я использую следующую функцию для замены mysql_result ()

function mysqli_result($result, $iRow, $field = 0)
{
    if(!mysqli_data_seek($result, $iRow))
        return false;
    if(!($row = mysqli_fetch_array($result)))
        return false;
    if(!array_key_exists($field, $row))
        return false;
    return $row[$field];
}
-1
ответ дан Dima L. 20 August 2018 в 14:56
поделиться

Это хороший ответ, из http://php.net/manual/es/class.mysqli-result.php

<?php
function mysqli_result($result,$row,$field=0) {
    if ($result===false) return false;
    if ($row>=mysqli_num_rows($result)) return false;
    if (is_string($field) && !(strpos($field,".")===false)) {
        $t_field=explode(".",$field);
        $field=-1;
        $t_fields=mysqli_fetch_fields($result);
        for ($id=0;$id<mysqli_num_fields($result);$id++) {
            if ($t_fields[$id]->table==$t_field[0] && $t_fields[$id]->name==$t_field[1]) {
                $field=$id;
                break;
            }
        }
        if ($field==-1) return false;
    }
    mysqli_data_seek($result,$row);
    $line=mysqli_fetch_array($result);
    return isset($line[$field])?$line[$field]:false;
}
?>
-1
ответ дан Fred 20 August 2018 в 14:56
поделиться
  • 1
    Это может быть не лучшее решение для производительности, но это единственный рабочий ответ для запросов с использованием имени таблицы в качестве префикса для каждого запрашиваемого поля +1. – alpadev 12 July 2017 в 15:28
function db_result($result,$row,$field) { 
  if($result->num_rows==0) return 'unknown'; 
  $result->data_seek($row);
  $ceva=$result->fetch_assoc(); 
  $rasp=$ceva[$field]; 
  return $rasp; 
}
4
ответ дан Kevin Peno 20 August 2018 в 14:56
поделиться

Хотя ответил , я думал, что смогу улучшить ответ, заданный после того же вопроса. Следующая функция полностью реплицирует функцию mysql_result () и возвращает false, когда вы находитесь вне границ вашего запроса (пустой результат, ни одна строка этого номера, ни один столбец этого номера). У него есть дополнительное преимущество, которое, если вы не укажете строку, принимает 0,0 (одно меньшее значение, которое нужно передать). Функция была обновлена ​​с учетом численного смещения поля или имени поля.

function mysqli_result($res,$row=0,$col=0){ 
    $numrows = mysqli_num_rows($res); 
    if ($numrows && $row <= ($numrows-1) && $row >=0){
        mysqli_data_seek($res,$row);
        $resrow = (is_numeric($col)) ? mysqli_fetch_row($res) : mysqli_fetch_assoc($res);
        if (isset($resrow[$col])){
            return $resrow[$col];
        }
    }
    return false;
}
29
ответ дан Mario Lurig 20 August 2018 в 14:56
поделиться
  • 1
    Вместо того, чтобы дважды вызывать mysqli_num_rows (), вы могли бы: mysqli_num_rows ($ res) & gt; $ Строка) – Craig Francis 2 April 2014 в 15:50
  • 2
    Чтобы уменьшить количество вызовов, его можно настроить следующим образом: $ numrows = myqsli_num_rows ($ res); if ($ numrows & amp; & amp; $ row & lt; = ($ numrows-1) & amp; $ row & gt; = 0) { – Mario Lurig 2 April 2014 в 19:36
  • 3
    Отметив, что это был долгий день ... но если myqsli_num_rows () возвращает 0, то if (mysqli_num_rows($result) > $row) { ... }, это не все, что вам нужно проверить? ... предполагая, что вы не собираетесь проходить в строке $ row = -1. .. или с обратным результатом из 5 строк, возвращенных ... если вы запрашиваете строку 0, которая меньше 5 (дает вам первую запись), запрос строки 4 также хорош (дает последнюю запись), запрашивая строку 5 или 6 не удалось (5 или 6 не менее 5). – Craig Francis 3 April 2014 в 18:17
  • 4
    Крейг, вы правы, но, будучи функциональной заменой для mysql_result (), я не хотел принимать никаких ошибок пользователя ($ row = -1). Но да, упрощая его: if ($ row & gt; = 0 & amp; & amp; mysqli_num_rows ($ res) & gt; $ row) { – Mario Lurig 3 April 2014 в 21:55
  • 5
    Функция была обновлена. Раньше $ col должно быть числовым смещением. Теперь он также принимает имя поля. – Mario Lurig 20 December 2014 в 07:27

Если вы ищете надежную библиотеку для подключения к базе данных, я предлагаю вам использовать AdoDB . Эта библиотека может подключаться к нескольким базам данных, и вам не нужно переписывать свой запрос, если вы меняете базу данных, если она не содержит какого-либо конкретного SQL-кода для определенного механизма базы данных. Проверьте эту страницу для примера использования. Кроме того, если вы используете PHP5, вы можете использовать foreach для iteration .

Надеюсь, это поможет вам преобразовать старые коды в более надежный и перекрестный код базы данных.

4
ответ дан Nisse Engström 20 August 2018 в 14:56
поделиться
  • 1
    Для создания цепочки объектов PHP5 вам не нужен. – Kevin Peno 5 May 2011 в 17:20
  • 2
    Я сам не пробовал цепочки в PHP 4, но я уверен, что прочитал несколько статей о том, как был дифференцирован в возвращаемых объектах в PHP 4, что делало невозможным цепочку. – HertzaHaeon 6 May 2011 в 16:31
  • 3
    После дальнейшей проверки, похоже, PHP4 не возвращает объекты по ссылке, что делает невозможным цепочку цепей . Об этом написано много статей. – HertzaHaeon 12 May 2011 в 16:37
  • 4
    Я думаю, что версия этого кода без цепочки методов была бы полезна. Тем более, что речь идет о переносе с mysql на mysqli, а не на PHP4 на 5. – Caltor 23 November 2011 в 14:18
  • 5
    Я просто понял, что это работает только в том случае, если в вашем запросе есть только одно поле с именем myfield. У меня есть две таблицы с полем «myfield» db_result («table1.myField»), а db_result («table2.myField») будет иметь такое же значение, даже если значения в строке db отличаются. Старая функция mysql_result выполняла задание правильно, так что это не совсем то же самое поведение. – nfroidure 6 January 2013 в 04:19
4
ответ дан Nisse Engström 31 October 2018 в 11:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: